我对 R 比较陌生,所以如果这太离谱了,我深表歉意。但我有一个看起来像这样的数据集:
#simplified input - actual data has ~20K observations,
#V1 is a categorical variable with 2 options, V3 is a categorical variable with 23 options
df <- tribble(
~V1, ~V2, ~V3,
"A", "a", "Z",
"A", "a", "Y",
"A", "b", "X",
"A", "b", "Z",
"B", "c", "Z",
"B", "a", "Z",
"B", "a", "Y",
"A", "d", "X",
"A", "e", "X",
"A", "f", "X",
"A", "g", "X",
"B", "g", "X",
"B", "h", "X",
"A", "i", "X",
)
我正在尝试根据 V1 和 V3 的组合计算 V2 的不同值。在这个示例数据中,“a”可以在 A 和 B 中找到,并且可以归类为 Z 或 Y。所以我设想的输出看起来像这样,其中数字是 V2 的不同计数:
所需的输出:
df <- tribble(
~V1, ~Z, ~Y, ~X,
"A_only", 1, 0, 5,
"B_only", 1, 0, 1,
"Both_A_and_B", 1, 1, 1
)
老实说,我完全不知道如何做到这一点,所以任何想法都将不胜感激。
更新
问题解决了!
library(dplyr)
library(tidyr)
df %>%
group_by(V1, V2, V3) %>%
add_count() %>%
pivot_wider(names_from = V3, values_from = n) %>%
group_by(V2) %>%
mutate(V1 = ifelse(length(V2) > 1, "Both_A_and_B",
ifelse(length(V2) == 1 & V1 == "A", "A_only",
"B_only"))) %>%
distinct() %>%
group_by(V1) %>%
summarise(across(Z:X, ~ sum(.x, na.rm = TRUE)))
# A tibble: 3 x 4
V1 Z Y X
<chr> <int> <int> <int>
1 A_only 1 0 5
2 B_only 1 0 1
3 Both_A_and_B 1 1 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句