r语言 - 具有一个因子水平(不包括 NA)的下降变量



我需要在嵌套数据集中删除具有一个水平(不包括 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)
}

这两个选项都不返回组"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]>

最新更新