R 按列计算唯一值

R 按列计算唯一值,r,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 >测向 x y z 1纳纳 2 NA NA 3 NA 1 这里有一种方法: library(dplyr) df %>% mutate(a

我寻找这个答案有一段时间了,但没有找到任何东西,所以它在这里。。。给定以下数据帧,如何按列计算不同值的数量

> 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
>测向
x y z
1纳纳
2 NA NA
3 NA 1

这里有一种方法:

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

这仅适用于
dplyr
n_distinct
函数列。
where(function(x){TRUE})
将为每一列返回
TRUE
,基本上是跨
调用选择
中所有内容的一种方式。

您也可以在
base R
中尝试:

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

x y z 
3 1 2 

使用
长度
+
唯一

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

使用
映射
长度

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

或使用
data.table

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