我很难理解dspirr的summarise功能中.group = "drop"的用途.我试图执行以下代码来显示前20个站点及其各自的纬度和经度:

summary <- trips_2023 %>% 
    filter(member_casual == "member") %>%
    group_by(start_station_name, start_lat, start_lng) %>%
    summarise(count = n()) %>%
    arrange(desc(count)) %>%
    mutate(type = "start",
           member = "member") %>% 
    slice(1:20) 

然而,该代码返回的表的行比请求的20行多得多.

如果我在summarise函数中添加.groups = "drop",那么代码就可以工作,但老实说,我不明白为什么.

summary <- trips_2023 %>% 
    filter(member_casual == "member") %>%
    group_by(start_station_name, start_lat, start_lng) %>%
    summarise(count = n(), .groups = "drop") %>%
    arrange(desc(count)) %>%
    mutate(type = "start",
           member = "member") %>% 
    slice(1:20) 

据称,.groups = "drop"指示dSEARCH在执行分组和汇总操作后删除组信息. 然而,我并不清楚这个定义. 我也看过官方文件,但不是很容易理解. 有人能用一个实际的例子帮助我更好地理解吗?

我还对这样一个事实感到困惑,即如果我执行该函数

groups(summary)

在第一个代码块(没有.groups ="drop")中,我得到的输出如下:

[[1]]
start_station_name

[[2]]
start_lat

start_lng人不也应该是一个群体吗?

谢谢

推荐答案

以这个数据框架为例:

ddff <- expand.grid(
  Group1 = LETTERS[1:3],
  Group2 = letters[4:6],
  Group3 = c("foo", "bar"))
ddff$value <- runif(18)

正如@lotus '和@JonSpring的 comments (以及该函数的文档)中所述,默认情况下,summarise将删除last分组变量,因此当您这样做时

ddff %>%
group_by(Group1, Group2, Group3) %>%
summarise(mean = mean(value))

你得到

`summarise()` has grouped output by 'Group1', 'Group2'. You can override using the `.groups` argument.
# A tibble: 18 × 4
# Groups:   Group1, Group2 [9]
   Group1 Group2 Group3   mean
   <fct>  <fct>  <fct>   <dbl>
 1 A      d      foo    0.593
 2 A      d      bar    0.228
 3 A      e      foo    0.830
 4 A      e      bar    0.381
 5 A      f      foo    0.156

注意第三行上的# Groups: Group1, Group2 [9]. summarise功能中的result仍然由Group1Group2分组. Group3已被删除作为分组变量,因为它是多余的:每Group1 xGroup2对只有一行,因此很可能您不想继续使用它进行分组.

这就是为什么要求summarise后的groups()只会返回前两个.

由于输出仍然是分组的,如果我们要求一些特定的slice,该函数将应用于每个组.如果我们要求slice(1):

ddff %>%
group_by(Group1, Group2, Group3) %>%
summarise(mean = mean(value)) %>%
slice(1) %>%
nrow()

我们得到9,即第一行of each group.


正如输出第一行上的消息所说,可以通过使用.groups参数来重写这种默认行为.它们非常不言自明:keep将保留所有组,drop将删除所有组:

ddff %>%
group_by(Group1, Group2, Group3) %>%
summarise(mean = mean(value), .groups = "keep") %>%
group_vars()
[1] "Group1" "Group2" "Group3"
ddff %>%
group_by(Group1, Group2, Group3) %>%
summarise(mean = mean(value), .groups = "drop") %>%
group_vars()
character(0)

R相关问答推荐

替换收件箱的子集(行和列)

R:如何自动化变量创建过程,其中我需要基于ifelse()为现有变量的每个级别创建一个单独的变量

更改网格的crs以匹配简单要素点对象的crs

通过绘图 Select 线串几何体并为其着色

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

寻找图片边缘

如何删除R中除某些特定名称外的所有字符串?

咕噜中的元素列表:map

如何编辑ggplot的图例字使用自定义对象(gtable)?'

如何在emmeans中计算连续变量的对比度

R中插入符号训练函数的中心因子和尺度因子预测

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何将网站图像添加到带有极坐标的面包裹条形图?

如何在ggplot2中创建多个y轴(每个变量一个)

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

循环遍历多个变量,并将每个变量插入函数R

`-`是否也用于数据帧,有时使用引用调用?

访问数据帧中未定义的列时出现R错误

名字的模糊匹配