如何使用lapply将向量中每个数字的值添加到DF列表中

时间:2017-05-21 17:16:01

标签: r

我有一个列表,其中每个元素是两列的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

2 个答案:

答案 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