首页 > 解决方案 > 如何在忽略 NA 的同时计算 R 中的唯一值

问题描述

这是我的输入数据

key     col_a      col_b      
  a       QQQ       <NA>    
  a       QQC       <NA>    
  b      <NA>        ACQ    
  b      <NA>        ACQ    
  

我想创建这个输出

  key     col_a      col_b      
    a         2          0    
    b         0          1    
  

我尝试使用 length(unique(x$col_a)) 来执行此操作,但它将 NA 计为值

我正在使用 data.tables 创建这个对象,它来自 ifelse() 语句。

我可以将我在 ifelse 语句中的值更改为其他值或计算唯一忽略 NA 的值吗?

标签: rdata.table

解决方案


对于每一个key我们可以在列中找到唯一值n_distinct

library(dplyr)

df %>%
  group_by(key) %>%
  summarise(across(col_a:col_b, n_distinct, na.rm = TRUE))

data.table这可以这样做:

library(data.table)
setDT(df)[, lapply(.SD, uniqueN, na.rm = TRUE), key, .SDcols = col_a:col_b]

   key col_a col_b
1:   a     2     0
2:   b     0     1

推荐阅读