R 如何有效地使用data.table解决此问题?请看新版本
我有一个数据,我需要从另一个数据中减去一个值。从上到下减去(通过id和变量x1,x2,…xn)R 如何有效地使用data.table解决此问题?请看新版本,r,data.table,R,Data.table,我有一个数据,我需要从另一个数据中减去一个值。从上到下减去(通过id和变量x1,x2,…xn) 库(data.table) 数据一个选项将是通过'id'在上加入 v1 <- grep('x\\d+', names(data), value = TRUE) v2 <- paste0(v1, ".sub") data[data.sub, Map(function(x, y) { qq <- cumsum(x) -y i1 <-
库(data.table)
数据一个选项将是通过'id'在
上加入
v1 <- grep('x\\d+', names(data), value = TRUE)
v2 <- paste0(v1, ".sub")
data[data.sub, Map(function(x, y) {
qq <- cumsum(x) -y
i1 <- which(qq > 0)[1]
after <- c(rep(0, i1-1),x[i1:.N])
return(after - x)
},
mget(v1), mget(v2)) , on = .(id), by = .EACHI]
v1请看新版本。你们能把“这个问题”放在你们问题的标题里吗。现在没用了。我改了名字。
{
xx <- data[id=="A",]$x1
yy <- data.sub[id=="A",]$x1.sub
qq <- cumsum(xx)-yy
x1.after <- c(rep(0,which(qq>0)-1),xx[which(qq>0):length(xx)])
x1.subs <- x1.after-xx
data.after <- data.frame(id=rep("A",length(xx)), x1=x1.subs)
}
xx <- data[id=="A",]$x1
yy <- data.sub[id=="A",]$x1.sub
qq <- cumsum(xx)-yy
index <- intersect(which(!qq<0), which(xx>0))[1]
x1.after <- c(rep(0,index-1),qq[index], xx[(index+1):length(xx)])[1:length(xx)]
x1.subs <- x1.after-xx
data.after <- data.frame(id=rep("A",length(xx)), x1=x1.subs)
data.after
v1 <- grep('x\\d+', names(data), value = TRUE)
v2 <- paste0(v1, ".sub")
data[data.sub, Map(function(x, y) {
qq <- cumsum(x) -y
i1<- intersect(which(!qq<0), which(x>0))[1]
after <- c(rep(0, i1-1), qq[i1], x[(i1+1):.N])[1:length(x)]
return(after - x)
},
mget(v1), mget(v2)) , on = .(id), by = .EACHI]
v1 <- grep('x\\d+', names(data), value = TRUE)
v2 <- paste0(v1, ".sub")
data[data.sub, Map(function(x, y) {
qq <- cumsum(x) -y
i1 <- which(qq > 0)[1]
after <- c(rep(0, i1-1),x[i1:.N])
return(after - x)
},
mget(v1), mget(v2)) , on = .(id), by = .EACHI]