Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何有效地使用data.table解决此问题?请看新版本_R_Data.table - Fatal编程技术网

R 如何有效地使用data.table解决此问题?请看新版本

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 <-

我有一个数据,我需要从另一个数据中减去一个值。从上到下减去(通过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 <- 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]