我有一个表格
的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中的哪些函数允许这种聚合?
答案 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)