分组并计算 R 中多列中的唯一值

Group by and count unique values in several columns in R

我看到很多关于如何计算一列值的示例。我找不到计算多列的解决方案。

我有这样的数据

city col1 col2 col3 col4 

我想按城市分组并计算 col1、col2、col3 中的唯一值...

aggregate(. ~ city, hh2, function(x) length(unique(x)))

我可以使用聚合进行计数,但它会将城市名称替换为数字,并且不清楚如何还原它。

在我看来,整洁的数据就是您所追求的。这是 ggplot2 中 mpg 数据集的 tidyverse 和子集的示例。

library(tidyverse)

data <- mpg[c("model", 'cty', 'hwy')]

head(data) #to see the initial data layout.

data %>%
  pivot_longer(cols = c('cty', 'hwy'), names_to = 'cat', values_to = 'values') %>%
  group_by(model, cat) %>%
  summarise(avg = mean(values))

这是一种使用 dplyr::across 的方法,这是一种跨多列计算的简便方法:

my_data <- data.frame(
  city = c(rep("A", 3), rep("B", 3)),
  col1 = 1:6,
  col2 = 0,
  col3 = c(1:3, 4, 4, 4),
  col4 = 1:2
)

library(dplyr)
my_data %>%
  group_by(city) %>%
  summarize(across(col1:col4, n_distinct))

# A tibble: 2 x 5
  city   col1  col2  col3  col4
* <chr> <int> <int> <int> <int>
1 A         3     1     3     2
2 B         3     1     1     2