首页 > 解决方案 > 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.

标签: rdataframedplyrna

解决方案


对于您给出的示例,您可以使用 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

推荐阅读