r - 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
谢谢你的帮助!
解决方案
您可以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
推荐阅读
- shell - 如何仅在 2 列中显示 shell 脚本中的日历?
- java - Java Applet For Loop - 似乎无法正确关闭它
- python - 标题更改时FFMPEG gdigrab不会停止
- ffmpeg - 如何在 MP4 中添加任意或自定义元数据?
- javascript - 运行我为solidity 项目制作的deploy.js 文件时出现assert.js:383 throw 错误。我应该怎么办?
- c - 如何用 C 编程语言替换多次出现的子字符串
- bash - 使用 shell 脚本更新字符串的最后一个字符
- javascript - 如何使用 Adobe Captivate 2019 重置/清除文本输入框对象的内容?
- javascript - 拖放防止碰撞
- heroku - 当我推送 Heroku: remote: 时出错 无法检测到此应用的默认语言