将空列添加到多个数据框
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]]
将分别为您提供添加了空列的 a
和 b
。
我想向多个数据框中添加多个空列。我知道为 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]]
将分别为您提供添加了空列的 a
和 b
。