我想在某些条件下聚合表中的行。例如我有:
x <- data.frame("id"=c("T","T","R","R"),"value"=c(10,-5,10,-5),"level"=c(3,2,1,2))
print(x)
我的条件是:对于相同的“id”,如果负值的级别低于正值的级别,那么我可以通过求和值进行聚合。所以我得到:
x <- data.frame("id"=c("T","R","R"),"value"=c(5,10,-5))
print(x)
我可以使用 aggregate() 函数来做到这一点吗?
或者:
x <- data.frame("id"=c("T","T","R","R"),"value"=c(10,-5,10,-5),"level"=c(3,2,1,2))
lookup_vec <- setNames(x[sign(x$value) == 1, ]$level,
as.character(x[sign(x$value) == 1, ]$id))
x$level_plus <- lookup_vec[as.character(x$id)]
x$level_plus <- ifelse(x$level_plus >= x$level, x$level_plus, x$level)
aggregate(value ~ id + level_plus, x, sum)[c("id", "value")]
# id value
# 1 R 10
# 2 R -5
# 3 T 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句