我已经很长时间没有找到这个答案了,所以什么也没找到,所以在这里...在给定以下数据帧的情况下,如何计算列的不同值的数量?
> 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
答案 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)
使用map
和lengths
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
调用中全选的方式。