2011-03-21 60 views
2

我有形式具有相同的索引和矩阵行

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 

基本上我用了很多重复的串排,我想通过增加合并具有相同字符串的所有行的R矩阵相应的行值。

结果应该是这样的:

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中有哪些功能让此聚集?

回答

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可以具有不同的数据类型的列。由式

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

现在对于骨料:

删除ID列

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 
+0

非常感谢,合计正是我一直在寻找。 – user670301 2011-03-21 23:42:50

2

这个问题是基本相同this question

因此:

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

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