样本数据:
tibble::tibble(id = c("101", "101", "101", "102", "102", "103"),
color = c("Blue", "Blue", "Red", "Red", "Green", "Green"))
#> # A tibble: 6 × 2
#> id color
#> <chr> <chr>
#> 1 101 Blue
#> 2 101 Blue
#> 3 101 Red
#> 4 102 Red
#> 5 102 Green
#> 6 103 Green
创建于 2024-09-05,使用 reprex v2.1.1
我想计算对于每个
id
值,具有特定 color
值的 color
的数量。
示例输出:
tibble::tibble(color = c("Blue", "Red", "Green"), number_of_ids_having_color = c("1",
"2", "2"))
#> # A tibble: 3 × 2
#> color number_of_ids_having_color
#> <chr> <chr>
#> 1 Blue 1
#> 2 Red 2
#> 3 Green 2
创建于 2024-09-05,使用 reprex v2.1.1
这有点类似于这个问题,区别在于(a)我的条件变量是分类的,(b)我想对所述变量的每个值进行计算。
作为一个额外的小问题(优先级较低),假设我还有另一个变量
most_important_color
,我还想计算 id
的每种颜色作为其 most_important_color
的数量:
tibble::tibble(id = c("101", "101", "101", "102", "102", "103"),
color = c("Blue", "Blue", "Red", "Red", "Green", "Green"),
most_important_color = c("F", "F", "T", "T", "F", "T"))
#> # A tibble: 6 × 3
#> id color most_important_color
#> <chr> <chr> <chr>
#> 1 101 Blue F
#> 2 101 Blue F
#> 3 101 Red T
#> 4 102 Red T
#> 5 102 Green F
#> 6 103 Green T
创建于 2024-09-05,使用 reprex v2.1.1
最终产品,将解决方案纳入我的第一个(也是更重要的问题),如下所示:
tibble::tibble(color_group = c("Blue", "Red", "Green"), number_of_ids_having_color = c("1",
"2", "2"), number_of_ids_having_color_as_most_important = c("0",
"2", "1"))
#> # A tibble: 3 × 3
#> color_group number_of_ids_having_color number_of_ids_having_color_as_most_im…¹
#> <chr> <chr> <chr>
#> 1 Blue 1 0
#> 2 Red 2 2
#> 3 Green 2 1
#> # ℹ abbreviated name: ¹number_of_ids_having_color_as_most_important
创建于 2024-09-05,使用 reprex v2.1.1
单独执行此操作,然后将该操作的结果连接到上面的操作结果是相当简单的,但我感兴趣是否有一种方法可以在单个管道中完成所有这些操作,而无需创建中间对象并将它们连接起来。
Tidyverse 解决方案是强烈首选,因为我与最熟悉 tidyverse 的人分享此代码。
谢谢!
第一个问题很简单地回答了
X = data.frame(id = c("101", "101", "101", "102", "102", "103"),
color = c("Blue", "Blue", "Red", "Red", "Green", "Green"))
aggregate(id~color, X[!duplicated(X), ], length)
给予
color id
1 Blue 1
2 Green 2
3 Red 2
它的
{dplyr}
对应:
library(dplyr)
X |>
distinct() |>
summarise(number_of_ids_having_color = length(id), .by = color)
给予
color number_of_ids_having_color
1 Blue 1
2 Red 2
3 Green 2