删除具有一个因子水平的变量,不包括 NA
Drop variables with one factor level excluding NAs
我需要在嵌套数据集中删除一级(不包括 NA)的因子变量。 'drop_fixed_factors' 下面的函数在评估因子水平数时将 NA 视为一个水平。我怎样才能解决这个问题,以便对于 A==Y,B 有一层 (A),而不是两层 (A, NA)?
df <- tibble::tribble(
~A, ~B,
"X", "A",
"X", "B",
"Y", "A",
"Y", NA_character_,
"Z", "A",
"Z", "B",
"Z", NA_character_,
"K", "A",
"K", "A",
"L", NA_character_,
"L", NA_character_,
)
df$B <- as.factor(df$B)
dfgrp <- df %>%
group_by(A) %>%
nest()
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & length(unique(.x))<2)
}
dfgrp1 <- dfgrp %>%
mutate(data_1 = map(data, ~drop_fixed_factors(.x)))
dfgrp1
dfgrp1$data_1[[2]]
对于组 A == "Y",所需的输出不应该有变量 B。
您可以手动删除 unique
中的 NA
值:
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & length(unique(na.omit(.x)))<2)
}
或者您可以使用 dplyr::n_distinct
并使用 na.rm
参数:
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & n_distinct(.x, na.rm = TRUE)<2)
}
两个选项 return 组 "Y" 没有。
dfgrp1
# A tibble: 5 x 3
A data data_1
<chr> <list> <list>
1 X <tibble [2 x 1]> <tibble [2 x 1]>
2 Y <tibble [2 x 1]> <tibble [2 x 0]>
3 Z <tibble [3 x 1]> <tibble [3 x 1]>
4 K <tibble [2 x 1]> <tibble [2 x 0]>
5 L <tibble [2 x 1]> <tibble [2 x 0]>
我需要在嵌套数据集中删除一级(不包括 NA)的因子变量。 'drop_fixed_factors' 下面的函数在评估因子水平数时将 NA 视为一个水平。我怎样才能解决这个问题,以便对于 A==Y,B 有一层 (A),而不是两层 (A, NA)?
df <- tibble::tribble(
~A, ~B,
"X", "A",
"X", "B",
"Y", "A",
"Y", NA_character_,
"Z", "A",
"Z", "B",
"Z", NA_character_,
"K", "A",
"K", "A",
"L", NA_character_,
"L", NA_character_,
)
df$B <- as.factor(df$B)
dfgrp <- df %>%
group_by(A) %>%
nest()
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & length(unique(.x))<2)
}
dfgrp1 <- dfgrp %>%
mutate(data_1 = map(data, ~drop_fixed_factors(.x)))
dfgrp1
dfgrp1$data_1[[2]]
对于组 A == "Y",所需的输出不应该有变量 B。
您可以手动删除 unique
中的 NA
值:
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & length(unique(na.omit(.x)))<2)
}
或者您可以使用 dplyr::n_distinct
并使用 na.rm
参数:
drop_fixed_factors <- function(x) {
x %>% discard(~is.factor(.x) & n_distinct(.x, na.rm = TRUE)<2)
}
两个选项 return 组 "Y" 没有。
dfgrp1
# A tibble: 5 x 3
A data data_1
<chr> <list> <list>
1 X <tibble [2 x 1]> <tibble [2 x 1]>
2 Y <tibble [2 x 1]> <tibble [2 x 0]>
3 Z <tibble [3 x 1]> <tibble [3 x 1]>
4 K <tibble [2 x 1]> <tibble [2 x 0]>
5 L <tibble [2 x 1]> <tibble [2 x 0]>