在 %>% 内使用应用函数
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))
下面我创建了一个函数,如果其中只有一个唯一值,它会删除特定的列。我可以以某种方式在 %>% 中使用 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))