R 是否有一种方法可以将较大列表中的数据帧列表相加?

R 是否有一种方法可以将较大列表中的数据帧列表相加?,r,loops,matrix,data-structures,bioinformatics,R,Loops,Matrix,Data Structures,Bioinformatics,我有一个大列表(z),其中包含3个10个数据帧的列表。我想将这个对象折叠成一个包含3个数据帧的列表,其中每个数据帧是之前10个数据帧的总和(想想矩阵加法)。这就是我正在使用的,请记住,这些都是假的数字,因为真实数据是从数百个*.csv文件中读取的 x = rep(1,100) x = matrix(x,10,10) x = as.data.frame(x) y = list(x,x,x,x,x,x,x,x,x,x) z = list(y,y,y) 所需的最终产品如下所示: x1 = rep

我有一个大列表(
z
),其中包含3个10个数据帧的列表。我想将这个对象折叠成一个包含3个数据帧的列表,其中每个数据帧是之前10个数据帧的总和(想想矩阵加法)。这就是我正在使用的,请记住,这些都是假的数字,因为真实数据是从数百个*.csv文件中读取的

x = rep(1,100)
x = matrix(x,10,10)
x = as.data.frame(x)
y = list(x,x,x,x,x,x,x,x,x,x)
z = list(y,y,y)  
所需的最终产品如下所示:

x1 = rep(10,100)
x1 = matrix(x,10,10)
y1 = list(x1,x1,x1)
我一直在尝试以下内容:

z1 = c()
for (i in 1:3){
  for (j in 1:10){
    z1[[i]] = sum(z[[i]][[j]])
  }
  }
但是,这不会产生所需的输出。我还弄乱了一些
apply
函数,但并没有用


提前感谢您的帮助

我们可以使用
Reduce
列表中相应的i,j元素求和
并将其折叠为单个数据集

lapply(z, function(x) Reduce(`+`, x))
如果我们想删除最后一列,它不是数字

lapply(z, function(x) Reduce(`+`, lapply(x, function(y) y[-ncol(y)])))
或者它可以在
list

lapply(seq_along(z), function(i) Reduce(`+`, lapply(seq_along(z[[i]]), 
          function(j) z[[i]][[j]][-ncol(z[[i]][[j]])])))

如果要使用
sum
列表中的
data.frame
可以转换为
数组
,使用
应用
数组
上循环,指定
边距
并执行
求和。在该选项中,还可以在
sum
中处理
NA.rm=TRUE
NA
元素

lapply(z, function(x) apply(array(unlist(x), c(10, 10, 10)),
        1:2, sum, na.rm = TRUE))
或者只在一维上循环并使用
colSums

lapply(z, function(x) apply(array(unlist(x), c(10, 10, 10)), 1, colSums, na.rm = TRUE))

或者对
循环使用

z1 <- replicate(length(z), matrix(0, 10, 10), simplify = FALSE)
for(i in seq_along(z)) for(j in seq_along(z[[1]])) z1[[i]] <- z1[[i]] + z[[i]][[j]]

z1如何将x表示为z的索引?目前,我访问的数据帧(x)如下z[[y][[x]]@eabrown2378。你说的是
lappy
(第一种方法)。在
for
循环中,我们使用
[
进行索引子集设置(
z[[i]][[j]]
)是的,第一种方法。此外,每个数据帧的最后一列是一个字符向量。是否有快速修复方法可以删除每个帧的最后一列?@eabrown2378我更新了删除最后一列的方法。它有效!感谢您耐心等待我,我会接受您的回答