不等于特定类别的类别数

时间:2018-05-21 08:57:39

标签: r dplyr summarize

我有一个包含许多分类列的数据框。 我想计算不等于" bla"的不同类别的数量。 例如:

> d1
# A tibble: 5 x 2
    x      y    
  <chr>  <chr>
1 yellow A    
2 green  A    
3 green  bla  
4 blue   B    
5 bla    bla  

如何修改dplyr&#39;

d1 %>% summarise_all(n_distinct)

排除类别&#34; bla&#34;?在这种情况下,列x的答案应为3,列y的答案应为2。

3 个答案:

答案 0 :(得分:3)

我们可以使用filter_allfilter来自所有列的行,然后使用n_distinct获取唯一值的长度。

library(dplyr)

d1 %>% 
   filter_all(all_vars(. != "bla")) %>% 
    summarise_all(n_distinct)

#  x y
#1 3 2

答案 1 :(得分:1)

使用 base :: lengths()

lengths(lapply(d1, function(i) unique(i[ i != "bla" ])))
# x y 
# 3 2 

答案 2 :(得分:0)

使用数据表

library(data.table)

d1 <- data.table(d1)

d1[!y %like% 'bla', .(count = .N, distinct = uniqueN(x)), by = .(y)]