我有一个数据集(测试)
v1 v2 v3 v4 v5 v6
1 1 1 0 0 0
2 2 1 1 0 0
3 2 1 0 0 0
4 3 1 0 0 0
5 3 1 1 0 1
6 3 1 0 1 1
structure(list(V1 = 1:6, V2 = c(1L, 2L, 2L, 3L, 3L, 3L), V3 = c(1L,
1L, 1L, 1L, 1L, 1L), V4 = c(0L, 1L, 0L, 0L, 1L, 0L), V5 = c(0L,
0L, 0L, 0L, 0L, 1L), V6 = c(0L, 0L, 0L, 0L, 1L, 1L)), .Names = c("V1",
"V2", "V3", "V4", "V5", "V6"), class = "data.frame", row.names = c(NA,
-6L))
我希望实现这个
v1 v2 v3 v4 v5 v6
1 1 1 0 0 0
5 2 2 1 0 0
15 3 3 1 1 2
我试过这个:
aggregate(test[c('v3', 'v4', 'v5','v6')], list('v2'), FUN=sum, na.rm=TRUE)
哪个不行。我想基于V2聚合(测试)中的数据并将其他变量相加。
答案 0 :(得分:6)
将aggregate
命令更改为:
aggregate(. ~ V2, test, sum)
# V2 V1 V3 V4 V5 V6
# 1 1 1 1 0 0 0
# 2 2 5 2 1 0 0
# 3 3 15 3 1 1 2
有些注意事项:
aggregate()
的公式表示法,或者您需要使用with()
或(不推荐)attach()
。答案 1 :(得分:1)
您最初的尝试几乎是正确的。通过微小的校正,您可以实现您想要的。这假设您希望按V2汇总行和
result <- aggregate(test[,c('V1', 'V3', 'V4', 'V5','V6')], list(test[,'V2']), FUN=sum, na.rm=TRUE)
> names(result) <- gsub("Group.1", "V2", names(result))
> result
V2 V1 V3 V4 V5 V6
1 1 1 1 0 0 0
2 2 5 2 1 0 0
3 3 15 3 1 1 2