将空列添加到多个数据框

Adding empty columns to multiple dataframes

我想向多个数据框中添加多个空列。我知道为 1 个数据帧执行此操作的代码是 df[,namevector] <- NA (other question)。 Namevector 是一个向量,其中包含应添加的空变量的名称。我有一个包含多个数据帧的列表,所以我认为以下代码可以解决问题。

a <- data.frame(x = 1:10, y = 21:30)
b <- data.frame(x = 1:10, y = 31:40)
c <- list(a,b)
namevector <- c("z","w")     

EmptyVariables <- function(df) {df[,namevector] <- NA}
sapply(X = c, FUN = EmptyVariables)

我没有收到错误消息,但是这两行代码也没有添加空列。

原则上解决方案在 BondedDust 的评论中,但也许一些额外的解释可能会有所帮助。

为什么您的原始代码不起作用?对此有两点要说:

  • 正如BondedDust所说,函数内部的赋值EmptyVariables是在函数的环境中完成的。因此,仅更改了数据框 df 的本地副本,但 而不是 存在于全局环境中的 df。调用 EmtpyVariables(a) 会使 a 保持不变。
  • 一个函数return是它最后一行的输出。由于 EmptyVariables 的最后一行是一个赋值,并且由于赋值在 R 中没有 return 任何东西,所以该函数也没有 return 任何东西。这就是您从对 sapply 的调用中简单地得到 NA 两次的原因。 BondedDust已经指出了解决方法:函数体应该是{df[,namevector] <- NA;df}。在这种情况下,更改后的数据框作为函数的结果被 returned。

还有关于 sapply 的评论:此函数尝试 return 向量或矩阵。但是您的数据框列表不能以这种方式合理地简化,因此您应该使用 lapply.

最后,这是应该执行您想要的操作的代码:

EmptyVariables <- function(df) {df[,namevector] <- NA;df}
res <- lapply(X = c, FUN = EmptyVariables)

res 将是一个包含两个数据框的列表。因此,res[[1]]res[[2]] 将分别为您提供添加了空列的 ab