library(data.table)
dt_store<-list()
A <- data.table(a = paste0("gid",1:4), b = paste0("IID",12:15),value=seq(from=1, to=4))
B <- data.table(a = paste0("gid",1:4), b = paste0("IID",12:15),value=seq(from=11, to=14))
C <- data.table(a = paste0("gid",1:4), b = paste0("IID",12:15),value=seq(from=21, to=24))
dt_store[[1]]<-A
dt_store[[2]]<-B
dt_store[[3]]<-C
我想对value
列求和/相加。列表中的每个data.table都有相同的行数和相同的列名。列b
是唯一的。a
列中可能存在重复项
我想得到的最终输出为:
a b final_sum
gid1 IID12 33
gid2 IID13 36
gid3 IID14 39
gid4 IID15 42
Reduce("+",lapply(dt_store,value))
#这出错了。
如何使用Reduce
或lapply
、mapply
?我可以使用for循环,但那太天真了。很抱歉,我很难掌握这些关键功能
我们可以使用rbindlist
对list
元素进行rbind,然后通过sum
进行分组
library(data.table)
rbindlist(dt_store)[, .(final_sum = sum(value)), .(a, b)]
-输出
# a b final_sum
#1: gid1 IID12 33
#2: gid2 IID13 36
#3: gid3 IID14 39
#4: gid4 IID15 42