分组并计算 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
我看到很多关于如何计算一列值的示例。我找不到计算多列的解决方案。
我有这样的数据
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