r - Get Column names using pipes r
问题描述
I am trying to get column names of NA columns using named pipes in R:-
df <- structure(data.frame(id = c(1, 2, NA, NA, NA, NA),
cat = c("SS","SS", "SS", "SV", "SV", "SV"),
val = c(220L, 222L, 223L, NA,NA, 2206L)),
.Names = c("id", "cat", "val"), class = "data.frame",
row.names = c(NA,-6L))
sapply(df, function(x) ((sum(is.na(x))))*.01)%>%
stack %>% rev %>% filter(values > 0) %>% setNames(nm=c("variable", "missing"))%>%
paste0(colnames ->NulCols)
But the code gives out error. Error in paste0(., NulCols <- colnames) : cannot coerce type 'closure' to vector of type 'character'
Want to create a list of NA Columns using named pipes only.
解决方案
对于您给出的示例,您可以使用 pull 来获取列名,如下所示;
library(dplyr)
df <- structure(data.frame(id = c(1, 2, NA, NA, NA, NA),
cat = c("SS","SS", "SS", "SV", "SV", "SV"),
val = c(220L, 222L, 223L, NA,NA, 2206L)),
.Names = c("id", "cat", "val"), class = "data.frame",
row.names = c(NA,-6L))
sapply(df, function(x) ((sum(is.na(x))))*.01) %>%
stack %>%
rev %>%
filter(values > 0) %>%
setNames(nm = c("variable", "missing")) %>%
pull(variable) %>%
as.character(.) -> NulCols
一般来说,如果你想要得到的只是包含任何 NA 的列的名称,你可以使用 Base R 以更简单的方式做到这一点,有很多方法,但这里有一些你可以使用;
# Method 1
colnames(df)[!complete.cases(t(df))]
# Method 2
names(df)[sapply(df, anyNA)]
# Method 3
names(df)[!!colSums(is.na(df))]
如果使用管道对你来说是必不可少的,你也可以使用这样的东西;
df %>%
select_if(function(x) any(is.na(x))) %>%
colnames(.) -> NulCols
推荐阅读
- proxy - 我如何在 wso2 ESB/EI 中向我的地址端点添加值
- android - 如何对 Android 上的 LiveData 视图进行故障排除,其中值始终为空,但记录存在非空字段?
- csv - 根据名称合并csv文件
- java - 使用 ehcache 刷新缓存时出现 java.io.NotSerializableException
- firebase - 使用 Firebase Analytics 进行非常不可靠的转化跟踪
- docker - 如何更正 firewalld 和 docker/nginx 的配置?
- reactjs - Chakra UI 对于自己的组件无法正常工作
- .net - 在 VB.NET 中使用“嵌套”函数重复调用多个函数
- python - 使用约束列表创建 Pyomo 的 ConstraintList 而不是单独添加它们?
- mongodb - Mongo/Mongoose - 类似的查询产生两个不同的结果