在特定条件下使用带R的Aggregate()函数聚合行,而不使用dplyr
我想在某些条件下聚合表中的行。例如,我有:在特定条件下使用带R的Aggregate()函数聚合行,而不使用dplyr,r,aggregate,vectorization,R,Aggregate,Vectorization,我想在某些条件下聚合表中的行。例如,我有: x您可以使用by do.call(rbind, by(x, x$id, function(x) {i <- cbind(x, d=c(1, diff(x[, 3]))); i[i$d > 0, 1:2]})) # id value # 1 T 5 # 2 R 10 # 3 R -5 do.call(rbind,by(x,x$id,函数(x){i0,1:2]})) #id值 #1吨5 #2 R 10 #3 R-
x您可以使用by
do.call(rbind, by(x, x$id, function(x) {i <- cbind(x, d=c(1, diff(x[, 3]))); i[i$d > 0, 1:2]}))
# id value
# 1 T 5
# 2 R 10
# 3 R -5
do.call(rbind,by(x,x$id,函数(x){i0,1:2]}))
#id值
#1吨5
#2 R 10
#3 R-5
或:
x
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