r - 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。这怎么可能?
解决方案
问题将是打破分组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,而是因为提取了整列
推荐阅读
- android - Rxjava2:Single 和 CompositeDisposable 的用法
- android - 无法更新当前位置 FusedLocationClient
- javascript - 有没有办法在语义 ui 上使用带有自定义验证的 promise
- jquery - 向上滑动前更改文本
- python - 基于 IQR 按组去除异常值
- javascript - 项目不可拖动
- python - 错误:找不到 Requirement.parse('rest_framework>=3.6.3') 的合适分布
- spring-boot - 找不到 oneToOne 关系的实体
- javascript - 在本机反应中使用 Scrollview 和 KeyboardAvoidingView 阻止文本输入的键盘
- ios - 设备上的 iOS 单元测试无法启动 - HealthKit 权利错误