r - 从具有重复值的数据框中删除列
问题描述
我有以下包含字符和数字的数据框,以及 NA:
df <- data.frame(a=c("notfound","NOT FOUND","NOT FOUND"), b=c(NA,"NOT FOUND","NOT FOUND"), c=c("not found",2,3), d=c("not found","NOT FOUND","NOT FOUND"), e=c("234","NOT FOUND",NA))
a b c d e 1 notfound <NA> not found not found 234 2 NOT FOUND NOT FOUND 2 NOT FOUND NOT FOUND 3 NOT FOUND NOT FOUND 3 NOT FOUND <NA>
我想删除所有条目为“未找到”、“未找到”、“未找到”“未找到”的所有列。基本上如果tolower(gsub(" ","",df)=="notfound")
. 似乎此操作不适用于数据帧。有没有其他选择?
所需的输出将是:
d e 1 not found 234 2 2 NOT FOUND 3 3 <NA>
解决方案
您可以使用grepl
正则表达式来搜索与该表达式匹配的字符串,并仅保留某些元素不显示匹配的列(由FALSE
grepl
输出指示),以便该列的匹配数小于nrow(df)
. 此模式匹配以“not”开头并以“found”结尾的字符串,并grepl
设置为不区分大小写。
is_nf <-
sapply(df, grepl, pattern = '(?=^not).*found$',
perl = TRUE, ignore.case = TRUE)
df[colSums(is_nf) < nrow(df)]
# b c e
# 1 <NA> not found 234
# 2 NOT FOUND 2 NOT FOUND
# 3 NOT FOUND 3 <NA>
我猜您还想删除唯一非“未找到”为 NA 的列。
is_na <- is.na(df)
df[colSums(is_nf | is_na) < nrow(df)]
# c e
# 1 not found 234
# 2 2 NOT FOUND
# 3 3 <NA>
推荐阅读
- python - 使用字典理解将 2 个列表转换为字典
- python-3.x - 如何获取所有数字列的“.describe()”统计信息,无论是否嵌套?
- python - 是否可以在 PID 的帮助下找到文件的位置?
- python-3.x - 从数据框中删除标点符号和停用词
- javascript - 使用 Python 解释 Javascript Web 应用程序
- r - 我可以将插入符号 RFE 结果用于带有 CV 的后续随机森林吗?
- flutter - OnPressed() 返回在 null 上调用了方法“call”。接收方:null 尝试调用:call() 作为错误
- xpath - Xidel:如何从许多相同的值/类中仅选择 1 个并从结果中删除不需要的元素?
- sql - 我正在尝试使用来自 SQL 的查询填充我的 ComboBox
- c++ - 对 operator= 使用通用引用而不是多个重载