我想知道如何在dplyr中编写类似于sapply的代码。这里我正在计算不同值的数量。我有多个类似的sapply语句,所以我想使用dplyr中的mutate
来编写。
distinctValues <- sapply(iris, function(var) dplyr::n_distinct(var))
.names = "{.col}.new{.fn}"
。iris %>%
summarize(across(everything(), n_distinct, .names = "{.col}.new{.fn}"))
across
中使用summarize
。library(dplyr)
iris %>%
summarize(across(everything(), n_distinct))
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 35 23 43 22 3
你也可以使用以下解决方案:
library(purrr)
iris %>%
map_dbl(~ n_distinct(.x))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
35 23 43 22 3
在基础R
中,我们可以进行以下操作:
sapply(iris, function(var) length(unique(var)))
使用 uniqueN
的 data.table
选项
> as.data.table(iris)[, sapply(.SD, uniqueN)]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
35 23 43 22 3
sapply(iris, uniqueN)
更简单,而且效果相同。 - andschar