在 R 中聚合时创建虚拟变量

create dummy variables while aggregating in R

我想在 R 中聚合数据帧时创建虚拟变量。

dat <- read.table(textConnection('ID Score Info
1     1     A    1
2     1     A    10
3     1     B    7
4     2     C    8
5     2     B    9
6     2     B    1
7     3     B    7
8     3     C    8
9     3     C    3
10     3     A    2'))

基本上,我想按 "ID" 聚合并计算具有相同 ID 的行数,这很容易,但我还需要根据列 "Row" 创建虚拟变量。如果 A/B/C 出现在同一 ID 中,则虚拟变量的值为 1,否则为 0。 例如,ID 2 没有 A,因此 ID 2 的 Score_A 为 0,而 Score_B 和 Score_C.

为 1

输出如下:

      ID  Count Score_A Score_B Score_C
1     1     3      1      1       0
2     2     3      0      1       1
3     3     4      1      1       1

如有任何帮助,我们将不胜感激。

我们在按'ID'分组后创建一个频率列'Count',然后添加第二个分组'Score',summarise第一个值'Count' ] 和一列 1,并且 spread 到 'wide' 格式

dat %>% 
    group_by(ID) %>%
    mutate(Count = n()) %>%
    group_by(Score = paste0("Score_", Score), add = TRUE) %>%
    summarise(Count = first(Count), n1 = 1)  %>%
    spread(Score, n1, fill = 0)
# A tibble: 3 x 5
# Groups: ID [3]
#     ID Count Score_A Score_B Score_C
#* <int> <int>   <dbl>   <dbl>   <dbl>
#1     1     3    1.00    1.00    0   
#2     2     3    0       1.00    1.00
#3     3     4    1.00    1.00    1.00