dplyr 列的条件选择(删除具有 < n 个唯一值的列)
dplyr Conditional Selection of Columns (drop columns with < n unique values)
我正在尝试从满足特定条件的数据集中删除变量。目前我正在使用一个两步过程来总结然后删除符合摘要逻辑操作的列,如下所示:
library(tidyverse)
data <- tibble(
date = seq.Date(as.Date("2012-01-01"), length.out = 5, by = 'day'),
x = rep(1, times = 5),
y = 1:5
)
tmp <- data %>%
select(-date) %>%
summarise_all(funs(length(unique(.))))
tmp <- names(tmp)[tmp<2]
data <- select(data, -one_of(tmp))
rm(tmp)
然后对 sd、mean 等重复该过程。我只是想知道是否有更简洁的方法在一个管道集中完成此操作。此外,我有一个非常宽的数据框,所以这需要一段时间才能 运行 所以任何关于速度的想法也将不胜感激。
目前的 'tidy' 方法是使用 select(where())
n <- 4
iris %>%
select(where(~length(unique(.x)) > n))
我正在尝试从满足特定条件的数据集中删除变量。目前我正在使用一个两步过程来总结然后删除符合摘要逻辑操作的列,如下所示:
library(tidyverse)
data <- tibble(
date = seq.Date(as.Date("2012-01-01"), length.out = 5, by = 'day'),
x = rep(1, times = 5),
y = 1:5
)
tmp <- data %>%
select(-date) %>%
summarise_all(funs(length(unique(.))))
tmp <- names(tmp)[tmp<2]
data <- select(data, -one_of(tmp))
rm(tmp)
然后对 sd、mean 等重复该过程。我只是想知道是否有更简洁的方法在一个管道集中完成此操作。此外,我有一个非常宽的数据框,所以这需要一段时间才能 运行 所以任何关于速度的想法也将不胜感激。
目前的 'tidy' 方法是使用 select(where())
n <- 4
iris %>%
select(where(~length(unique(.x)) > n))