在dplyr中替代sapply的方法

6

我想知道如何在dplyr中编写类似于sapply的代码。这里我正在计算不同值的数量。我有多个类似的sapply语句,所以我想使用dplyr中的mutate来编写。

distinctValues <- sapply(iris, function(var) dplyr::n_distinct(var))
4个回答

8
更新: 对于不同的名称,您可以使用.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

谢谢。我们有没有办法以不同的标签来标识它们? - Ujjawal Bhandari

4

你也可以使用以下解决方案:

library(purrr)

iris %>%
  map_dbl(~ n_distinct(.x))

Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
          35           23           43           22            3 

3

基础R中,我们可以进行以下操作:

sapply(iris, function(var) length(unique(var)))

2

使用 uniqueNdata.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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接