在 %>% 内使用应用函数

Use apply functions within %>%

下面我创建了一个函数,如果其中只有一个唯一值,它会删除特定的列。我可以以某种方式在 %>% 中使用 lapply 来避免调用该函数三次吗?或者甚至为所有列调用该函数?

df <- tibble(col1 = sample(1:6), col2 = sample(1:6), col3 = 3, col4 = 4)

condDelCol <- function(mycolumn, mydataframe) {    
    if(length(unique(mydataframe[[mycolumn]])) == 1) { mydataframe[[mycolumn]] = NULL }
    mydataframe
}

df %>% 
condDelCol("col2", .) %>% 
condDelCol("col3", .) %>% 
condDelCol("col4", .)

dplyr,一个选项是select_if

library(dplyr) 
df %>%
   select_if(~ n_distinct(.) > 1)
# A tibble: 6 x 2
#   col1  col2
#  <int> <int>
#1     1     6
#2     6     1
#3     5     5
#4     3     4
#5     4     2
#6     2     3

或者另一种方法是 base R,通过使用 sapply 遍历列,创建一个逻辑 vector,提取只有一个 unique 值的列名,然后将 (<-) 分配给 NULL

i1 <-  sapply(df, function(x) length(unique(x)))
df[names(which(i1 == 1))] <- NULL

或者用Filter

Filter(var, df)

你也可以用这个。它忽略标准偏差为 0 的列。

df[, sapply(df, sd) != 0]

# A tibble: 6 x 2
   col1  col2
  <int> <int>
1     1     3
2     5     6
3     6     1
4     2     2
5     3     4
6     4     5

或者如果你想使用管道运算符

df %>%
  select(which(sapply(df, sd) != 0))