按列计算唯一值

时间:2020-10-02 19:52:29

标签: r

我已经很长时间没有找到这个答案了,所以什么也没找到,所以在这里...在给定以下数据帧的情况下,如何计算列的不同值的数量?

> df <- data.frame(x = c(1,2,3), y = c(NA, NA, NA), z = c(NA, NA, 1))
> df
  x  y  z
1 1 NA NA
2 2 NA NA
3 3 NA  1

4 个答案:

答案 0 :(得分:4)

使用lengths + unique的简单基本R选项

> lengths(sapply(df,unique))
x y z
3 1 2

答案 1 :(得分:3)

您也可以尝试base R

#Code
apply(df,2, function(x) length(unique(x)))

输出:

x y z 
3 1 2 

答案 2 :(得分:3)

使用maplengths

library(purrr)
map(df, unique) %>% lengths
# x y z 
#3 1 2 

或使用data.table

library(data.table)
setDT(df)[, lapply(.SD, uniqueN)]

答案 3 :(得分:2)

这里是一种方法:

library(dplyr)
df %>% mutate(across(where(function(x){TRUE}), n_distinct)) %>% distinct()

这只是按列应用dplyr的{​​{1}}函数。 n_distinct将为每一列返回where(function(x){TRUE}),并且基本上是一种在TRUE调用中全选的方式。