r中

问题描述:

数据聚集I有一个数据组(试验)r中

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

+7

更重要的是,你完全不清楚你想如何从输入到输出。他们之间有什么关系? –

+0

这个问题还不清楚。 –

+1

我可以猜测你的意思是做什么,但仅仅提供输入和输出是远远不够的。对那些试图帮助你的人很好,并且在你想要做的事情中包含一个英语解释。 – joran

更改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()
+1

很好的使用聚合物配方。 –

+0

@Ananda Mahto,感谢您的解决方案和您的反馈。 –

您的初始尝试几乎是正确的。轻微的更正,你可以达到你想要的。这假定你想通过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 
+0

如果你不介意我会用Ananda Mahto的解决方案,但是谢谢你的解决方案,我正在学习很多东西,还有积极的反馈。 –