如何在data.table列表上应用聚合和rbind?

如何在data.table列表上应用聚合和rbind?,r,for-loop,data.table,lapply,R,For Loop,Data.table,Lapply,我尝试将此reprex应用于许多data.table的列表,并根据许多条件进行聚合。 我尝试了一些Lappy,mapply的组合,用于。。。没有成功 我的输入数据是此数据列表。表: nb.row <- 50 nb.col <- 5 lst.DT <- replicate(5, as.data.table(matrix(runif(n=nb.row*nb.col, min = 0, max = 100), nb.row, nb.col)), simplify = FALSE) c

我尝试将此reprex应用于许多data.table的列表,并根据许多条件进行聚合。 我尝试了一些Lappy,mapply的组合,用于。。。没有成功

我的输入数据是此数据列表。表:

nb.row <- 50
nb.col <- 5
lst.DT <- replicate(5, as.data.table(matrix(runif(n=nb.row*nb.col, min = 0, max = 100), nb.row, nb.col)), simplify = FALSE)
crit <- as.data.table(replicate(3,sample(1:5,nb.row, replace = TRUE)))
names(crit) <- c("C1", "C2", "C3")
lst.DT <- lapply(lst.DT, cbind, crit)
nb.row一个例子:

res1a <- rbindlist(
  lapply(
    paste0('C', 1:3),
    function(Ci) lst.DT[[1]][, .(new = sum(V4 / V5)), by = Ci]
  ), 
  use.names = FALSE
)
一个例子:

res1a <- rbindlist(
  lapply(
    paste0('C', 1:3),
    function(Ci) lst.DT[[1]][, .(new = sum(V4 / V5)), by = Ci]
  ), 
  use.names = FALSE
)

在这里,我对这个问题给出了另一种分析观点。总之,我关注与不同列名相关的列表结构C1、C2、C3,然后rbind all list

library(data.table)
sumby <- function(list_in,col_name){
    lapply(list_in, function(x) x[,.(new = sum(V4/V5)), by = col_name])
}

lt1 <- sumby(lst.DT,"C1")
lt2 <- sumby(lst.DT,"C2")
lt3 <- sumby(lst.DT,"C3")

# unify df's name in list then rbind all list
lt2 <- lapply(lt2, function(x) x[,.(C1=C2,new)])
lt3 <- lapply(lt3, function(x) x[,.(C1=C3,new)])
resu1 <- mapply(rbind,lt1,lt2,lt3, SIMPLIFY=FALSE)
库(data.table)

sumby这里,我对这个问题给出了另一种分析观点。总之,我关注与不同列名相关的列表结构C1、C2、C3,然后rbind all list

library(data.table)
sumby <- function(list_in,col_name){
    lapply(list_in, function(x) x[,.(new = sum(V4/V5)), by = col_name])
}

lt1 <- sumby(lst.DT,"C1")
lt2 <- sumby(lst.DT,"C2")
lt3 <- sumby(lst.DT,"C3")

# unify df's name in list then rbind all list
lt2 <- lapply(lt2, function(x) x[,.(C1=C2,new)])
lt3 <- lapply(lt3, function(x) x[,.(C1=C3,new)])
resu1 <- mapply(rbind,lt1,lt2,lt3, SIMPLIFY=FALSE)
库(data.table)

sumby我运行了rbindlist(list(dt1,dt2,dt3))这很有效..你不能获取“rbindlist”吗?哦,是的,我的reprex运行得很好。我想做的是优化写作。从示意图上看,遍历我的data.table列表,然后遍历条件(C1、C2、C3),使用lappy等…仍然有点不清楚。输入的数据是什么?您希望替换哪些步骤?很抱歉。我编辑了我的主要帖子。谢谢。我运行了rbindlist(list(dt1,dt2,dt3))这很有效。你不能获取“rbindlist”吗?哦,是的,我的reprex运行得很好。我想做的是优化写作。从示意图上看,遍历我的data.table列表,然后遍历条件(C1、C2、C3),使用lappy等…仍然有点不清楚。输入的数据是什么?您希望替换哪些步骤?很抱歉。我编辑了我的主要帖子。谢谢。太好了,对我有用,谢谢!太好了,对我有用,谢谢!谢谢,我会查的。谢谢,我会查的。