【发布时间】:2020-10-02 19:52:29
【问题描述】:
我找了这个答案很长一段时间,但没有找到任何东西,所以在这里......我如何按列计算不同值的数量,给定以下数据框?
> 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
【问题讨论】:
标签: 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
【问题讨论】:
标签: r
使用lengths + unique 的简单基本 R 选项
> lengths(sapply(df,unique))
x y z
3 1 2
【讨论】:
你也可以在base R试试:
#Code
apply(df,2, function(x) length(unique(x)))
输出:
x y z
3 1 2
【讨论】:
使用map 和lengths
library(purrr)
map(df, unique) %>% lengths
# x y z
#3 1 2
或者使用data.table
library(data.table)
setDT(df)[, lapply(.SD, uniqueN)]
【讨论】:
这是一种方法:
library(dplyr)
df %>% mutate(across(where(function(x){TRUE}), n_distinct)) %>% distinct()
这只是按列应用dplyr 的n_distinct 函数。 where(function(x){TRUE}) 将为每一列返回 TRUE,基本上是在 across 调用中选择所有的方法。
【讨论】: