我有一个列表,其中每个元素是两列的DF,并且总共有DF(列表的长度)。我还有一个长度为n的数字向量。我想将向量中的每个数值(总和)添加到列表中的每个DF。 例如,
df1 <- data.frame(x = runif(3), y = runif(3))
df2 <- data.frame(x = runif(3), y = runif(3))
dfs <- dfs <- list(df1, df2)
a <- c(1,2)
print(dfs)
[[1]]
x y
1 0.8272478 0.2574596
2 0.6211760 0.9493301
3 0.7034334 0.9994961
[[2]]
x y
1 0.3088512 0.7153767
2 0.2060098 0.8956978
3 0.5299310 0.1292302
我希望结果是
[[1]]
x y
1 1.8272478 1.2574596
2 1.6211760 1.9493301
3 1.7034334 1.9994961
[[2]]
x y
1 2.3088512 2.7153767
2 2.2060098 2.8956978
3 2.5299310 2.1292302
答案 0 :(得分:1)
我们可以使用Map
对“dfs&#39;”的相应元素求和。使用&#39; a&#39;
Map(`+`, dfs, a)
#[[1]]
# x y
#1 1.827248 1.257460
#2 1.621176 1.949330
#3 1.703433 1.999496
#[[2]]
# x y
#1 2.308851 2.715377
#2 2.206010 2.895698
#3 2.529931 2.129230
答案 1 :(得分:0)
如果您只想使用lapply,作为问题的标题,您需要能够跟踪您所处的位置。这需要在函数调用之间保持全局计数器。
curIndex <- 1
然后,我们需要一个函数将正确的元素添加到给定的data.frame,并递增计数器。
addNextElement <- function(x) {
nextElement <- a[curIndex]
curIndex <<- curIndex + 1
return(as.data.frame(lapply(x, `+`, nextElement)))
}
然后将上述功能应用于每个df。
> lapply(dfs, addNextElement)
#[[1]]
# x y
#1 1.391478 1.174208
#2 1.753578 1.222098
#3 1.973113 1.569923
#
#[[2]]
# x y
#1 2.454878 2.135680
#2 2.749754 2.132524
#3 2.269514 2.241654