对于数据帧的列表,我想检查是否存在一列,如果不存在,则将具有NA的列添加到所有数据帧。最重要的是,我试图覆盖旧的数据帧。
数据集:
df1 <- data.frame(a=c(1,2), b=c(3,NA))
df2 <- data.frame(b=c(1,2), c=c(3,NA))
df_list=list(df1, df2)
name <- "a"
我的尝试:
df_list <- lapply(df_list, function(x) x[name[!(name %in% colnames(x))]] = NA)
我正在寻找这个结果:
> df_list
[[1]]
a b
1 1 3
2 2 NA
[[2]]
b c a
1 1 3 NA
2 2 NA NA
修改您的代码-缺少的是返回更新的代码x
或使用setdiff
。
#lapply(df_list, function(x) x[name[!(name %in% colnames(x))]] = NA) #Your original code
lapply(df_list, function(x) {x[name[!(name %in% colnames(x))]] = NA; x}) #Modified
lapply(df_list, function(x) {x[,setdiff(name, names(x))] <- NA; x}) #Alternative
#[[1]]
# a b
#1 1 3
#2 2 NA
#
#[[2]]
# b c a
#1 1 3 NA
#2 2 NA NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句