确定一个tibble是否已分组

18

有没有函数可以确定一个 tibble 是否是分组的。

我使用以下代码创建一个聚合变量,同时不缩小数据集:

mydataset %>% select(count, group) %>%
  group_by(group) %>%
  mutate(count_group = sum(count))
如果我使用mutate,我会得到一个分组的tibble。如果我使用summarise,我会得到一个简单的tibble。
是否有一个函数,例如as.grouped(),可以确定tibble的字符分组?

7
你是否在寻找 dplyr 中的 is.grouped_df - JasonWang
是的,谢谢。它似乎没有出现在dplyr包的帮助索引中。 - YCR
如果您使用 pacman 软件包,那么 p_funs(dplyr) 将会显示 is.grouped_df - Dason
1
apropos('grouped') - rawr
@Dason p_funs 不是很实用,包的索引更好。(但不完整,显然) - YCR
你说它不太实用?我经常使用它啊。 - Dason
3个回答

16

is.grouped_df()is_grouped_df()这两个函数,如果它是一个分组的tibble,都会返回TRUE逻辑值,如果不是,则返回FALSE。

# Create a tibble    
df <- tibble(x = c(5, 2, NA))
# Group by column 'x'
gdf <- group_by(df, x)
# Returns FALSE
is.grouped_df(df)
# Returns TRUE
is.grouped_df(gdf)

4

当然你知道可以使用ungroup()来删除任何分组。不过,有一种简单的方法可以确定数据帧是否已经分组,那就是直接打印数据帧。分组变量将出现在顶部。

dataframe <- data_frame('group' = c('a','a','b'),
                        'value' = c(1,2,3))

dataframe %>% group_by(group)

Source: local data frame [3 x 2]
**Groups: group [2]**

  group value
  <chr> <dbl>
1     a     1
2     a     2
3     b     3

3

分组信息被保存为一个属性。例如:

library("tidyverse")
a <- mtcars %>% group_by(cyl)
attributes(a)
$names
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"

$row.names
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"
 [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"
 [7] "Duster 360"          "Merc 240D"           "Merc 230"
[10] "Merc 280"            "Merc 280C"           "Merc 450SE"
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood"
[16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"
[19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"
[22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"
[28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"
[31] "Maserati Bora"       "Volvo 142E"

$class
[1] "grouped_df" "tbl_df"     "tbl"        "data.frame"

$groups
# A tibble: 3 x 2
    cyl .rows
  <dbl> <list>
1     4 <int [11]>
2     6 <int [7]>
3     8 <int [14]>

attributes 函数可用于检查分组属性是否存在:

any(names(attributes(a)) == "groups")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接