首页 > 解决方案 > R lapply:检查数据框是否包含列。如果没有,请创建此列

问题描述

我有一个数据框列表。

我想检查数据框的每个列名。如果缺少列名,我想将此列创建到数据框,并使用 NA 值完成。

虚拟数据:

d1 <- data.frame(a=1:2, b=2:3, c=4:5)
d2 <- data.frame(a=1:2, b=2:3)

l<-list(d1, d2)

# Check the columns names of the dataframes 
# If column is missing, add new column, add NA as values 
lapply(l, function(x) if(!("c" %in% colnames(x))) 
             {
              c<-rep(NA, nrow(x))
              cbind(x, c) # does not work!
              })

我得到什么:

[[1]]
NULL

[[2]]
  a b  c
1 1 2 NA
2 2 3 NA

我想要的是:

[[1]]
  a b c
1 1 2 4
2 2 3 5

[[2]]
  a b c
1 1 2 NA
2 2 3 NA

谢谢你的帮助!

标签: r

解决方案


您可以dplyr::mutate使用ifelse

library(dplyr)
lapply(l, function(x) mutate(x, c = ifelse("c" %in% names(x), c, NA)))

[[1]]
  a b c
1 1 2 4
2 2 3 4

[[2]]
  a b  c
1 1 2 NA
2 2 3 NA

推荐阅读