首页 > 解决方案 > dplyr group_by 不适用于data.frame,但适用于另一个?

问题描述

这是我的问题: dplyr group_by 不适用于 data.frame,但它适用于另一个。有问题的数据框是从带有外部包的 SPSS 文件中导入的。当我执行时:

d_summarised <- d %>%
group_by(group) %>%
summarise(Sex = (sum(d$GENRE == "F", na.rm = TRUE))/sum(!is.na(d$GENRE))) %>%
select(Sex, group)

结果是在整个样本上计算的,而不是按组计算的(因此按组计算的结果是相同的,这是意料之外的)。

# A tibble: 6 x 2
  group      Sex
* <fct>      <dbl>
1 group1     0.626
2 group2     0.626
3 group3     0.626
4 group4     0.626
5 group5     0.626
6 NA         0.626

但是,同时,在同一个会话中,加载了相同的包,这是有效的:

dat <- data.frame(x=c(1,2,3,3,2,1), y=c(15,24,54,65,82,65))
dat %>%
group_by(x) %>%
summarise(mean(y))

结果如下:

# A tibble: 3 x 2
      x `mean(y)`
* <dbl>     <dbl>
1     1      40  
2     2      53  
3     3      59.5

plyr 没有加载,只有 dplyr。这怎么可能?

标签: rdplyr

解决方案


问题将是打破分组d$。相反,使用列名,它应该可以工作

library(dplyr)
d %>%
     group_by(group) %>%
     summarise(Sex = (sum(GENRE == "F", na.rm = TRUE))/sum(!is.na(GENRE))) %>%
     select(Sex, group)

注意:当我们使用 时d$GENRE,它选择数据集中的整个列,而不是限制组内的元素

在第二种情况下,OPmean直接应用于 'y' 而不是mean(dat$y). 换句话说,不是数据结构即data.frame vs tibble,而是因为提取了整列


推荐阅读