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我更新了删除最后一列的方法。它有效!感谢您耐心等待我,我会接受您的回答