具有相同索引的Sum矩阵行

时间:2011-03-21 23:22:49

标签: r

我有一个表格

的R矩阵
ID, string, float, int  
[...]  
2038 0;1;2;3;4;5;6;4;2;  898.990    325469692  
2040 0;1;2;3;4;5;6;4;2;  932.212    346769837  
2041 0;1;2;3;4;5;6;4;3; 1031.700    400210530  
2042 0;1;2;3;4;5;6;4;3; 1308.280    510633672  
2043 0;1;2;3;4;5;6;4;3; 1336.170    480728121  

基本上我有一个包含大量重复项的字符串的行,我希望通过添加相应的行值来合并所有具有相同字符串的行。

结果应如下所示:

XX  0;1;2;3;4;5;6;4;2; 1831.202    672239529  
XY  0;1;2;3;4;5;6;4;3; 3676.15     1391572323

R中的哪些函数允许这种聚合?

2 个答案:

答案 0 :(得分:3)

示例数据:

dat <- read.table(textConnection("ID, string, float, int  
2038 0;1;2;3;4;5;6;4;2;  898.990    325469692  
2040 0;1;2;3;4;5;6;4;2;  932.212    346769837  
2041 0;1;2;3;4;5;6;4;3; 1031.700    400210530  
2042 0;1;2;3;4;5;6;4;3; 1308.280    510633672  
2043 0;1;2;3;4;5;6;4;3; 1336.170    480728121"), header = TRUE)

结果是data.frame,而不是矩阵 - data.frame可以包含不同数据类型的列。

删除ID列:

dat <- dat[ , c("string.", "float.", "int")]

现在按公式汇总:

aggregate( . ~ string., data = dat, sum)
             string.   float.        int
1 0;1;2;3;4;5;6;4;2; 1831.202  672239529
2 0;1;2;3;4;5;6;4;3; 3676.150 1391572323

答案 1 :(得分:2)

这个问题与this question基本相同。

因此:

library(plyr)
ddply(dat, "string", summarise, floatsum = sum(float), intsum = sum(int))

library(reshape)
cast(melt(dat[, -1]), string ~ ..., sum)