R-折叠行并对列中的值求和
Posted
技术标签:
【中文标题】R-折叠行并对列中的值求和【英文标题】:R- Collapse rows and sum the values in the column 【发布时间】:2013-05-22 14:14:25 【问题描述】:我有以下数据框(df1):
ID someText PSM OtherValues ABC c 2 qwe CCC v 3 wer DDD b 56 ert EEE m 78 yu FFF sw 1 io GGG e 90 gv CCC r 34 scf CCC t 21 fvb KOO y 45 hffd EEE u 2 asd LLL i 4 dlm ZZZ i 8 zzas
我想折叠第一列并添加相应的 PSM 值 我想得到以下输出:
ID Sum PSM
ABC 2
CCC 58
DDD 56
EEE 80
FFF 1
GGG 90
KOO 45
LLL 4
ZZZ 8
聚合函数似乎可行,但不知道语法。 非常感谢任何帮助!谢谢。
【问题讨论】:
【参考方案1】:在基地:
aggregate(PSM ~ ID, data=x, FUN=sum)
## ID PSM
## 1 ABC 2
## 2 CCC 58
## 3 DDD 56
## 4 EEE 80
## 5 FFF 1
## 6 GGG 90
## 7 KOO 45
## 8 LLL 4
## 9 ZZZ 8
【讨论】:
【参考方案2】:使用dplyr的例子,plyr的下一次迭代:
df2 <- df1 %>% group_by(ID) %>%
summarize(Sum_PSM = sum(PSM))
当您输入字符%>%
时,您就是在“管道”。这意味着您正在输入该管道运算符左侧的内容并在右侧执行功能。
【讨论】:
【参考方案3】:使用plyr
包非常简单:
library(plyr)
ddply(df1, .(ID), summarize, Sum=sum(PSM))
【讨论】:
【参考方案4】:如果您只想保留原始列名并一次在一列内操作,使用聚合函数似乎比 dplyr 更好。避免使用汇总函数,
summary 函数文档中的注释
使用现有变量名时要小心;相应的 列将立即用新数据更新,这可以 影响引用这些变量的后续操作。
例如
## modified example from aggregate documentation with character variables and NAs
testDF <- data.frame(v1 = c(1,3,5,7,8,3,5,NA,4,5,7,9),
v2 = c(11,33,55,77,88,33,55,NA,44,55,77,99) )
by <- c("red", "blue", 1, 2, NA, "big", 1, 2, "red", 1, NA, 12)
aggregate(x = testDF, by = list(by1), FUN = "sum")
Group.1 v1 v2
1 1 15 165
2 12 9 99
3 2 NA NA
4 big 3 33
5 blue 3 33
6 red 5 55
你得到你想要的,但是当你使用 summarise 和 ddply 时,你需要指定名称。所以如果你有很多列,聚合似乎很方便。
testDF$ID=by1
ddply(testDF, .(ID), summarize, v1=sum(v1), v2=sum(v2) )
ID v1 v2
1 1 15 165
2 12 9 99
3 2 NA NA
4 big 3 33
5 blue 3 33
6 red 5 55
7 <NA> 15 165
要查看立即更新列的效果,您可以查看以下示例,
ddply(testDF, .(ID), summarize, v1=max(v1,v2), v2=min(v1,v2) )
ID v1 v2
1 1 55 55
2 12 99 99
3 2 NA NA
4 big 33 33
5 blue 33 33
6 red 44 11
7 <NA> 88 77
ddply(testDF, .(ID), summarize, v1=min(v1,v2), v2=min(v1,v2) )
ID v1 v2
1 1 5 5
2 12 9 9
3 2 NA NA
4 big 3 3
5 blue 3 3
6 red 1 1
7 <NA> 7 7
请注意,当V1使用max时,计算v2时col已经更新,所以例如ID=1的情况下,在v2中使用min时我们不能得到数字5。
【讨论】:
【参考方案5】:使用 data.table
setDT(df1)[, lapply(.SD, sum) , by = ID, .SDcols = "PSM" ]
【讨论】:
以上是关于R-折叠行并对列中的值求和的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jaspersoft iReport Designer 中对列中的所有值求和?