1

我有一个数据集(测试)

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 聚合(测试)中的数据并对其他变量求和。

4

2 回答 2

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

需要注意的一些事项:

  1. R 区分大小写。您提供的示例数据具有以大写“V”命名的变量,但您尝试的示例代码具有小写“v”。
  2. 您正在尝试直接引用变量名称。为此,您要么需要使用公式表示法,aggregate()要么需要使用with()或(不推荐)attach()
于 2013-01-23T16:12:55.187 回答
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
于 2013-01-23T16:17:49.270 回答