合并相似(但不相等)的行并计算 R 中的不同分类变量

Consolidating similar (but not equal) rows and counting the differing categorical variable in R

我有以下数据框(‘mydf’):

ID   Type   Count  Mark
U1     A     50     R1
U1     A     50     R3
U1     A     50     R4
U1     A     50     R3
U2     B     24     R2
U2     B     24     R5
U3     A     88     R1

每行包含 4 个变量:

目前,出现的每个标记对应一行,因此每个ID有多个行。

不同ID的标记数量不同(4-50之间任意)。

我需要做什么:

  1. 将具有相同ID的行合并为一行,其中包含所有一致的信息(Type/Count),以及出现的所有标记的列表(或计数)对于那个ID。此列表需要反映每个标记针对该 ID 出现的频率(例如,如果同一标记针对单个 ID 出现两次,则需要反映这一点,就像第 2 行和第 4 行中的 U1 一样)。

  2. 统计每个ID每个标记出现的次数。

  3. 计算每个ID的总分数。

只要 2 和 3 中描述的计数存在,就没有必要列出每个 ID 的标记(例如,请参见下面的预期输出)。

预期输出(大约):

ID   Type   Count  Mark_R1 Mark_R2 Mark_R3 Mark_R4 Mark_R5 Mark_Total
U1     A     50       1       0       2       1       0       3
U2     B     24       0       1       0       0       1       2
U3     A     88       1       0       0       0       0       1

感谢您的帮助!

我们可以用dplyr

library(dplyr)
library(tidyr)
mydf %>%
     count(ID, Type, Count, Mark) %>%
     spread(Mark, n, fill = 0) %>%
     ungroup() %>% 
     mutate(Total = rowSums(.[grep("R\d+", names(.))]))
#     ID  Type Count    R1    R2    R3    R4    R5 Total
#   <chr> <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1    U1     A    50     1     0     2     1     0     4
#2    U2     B    24     0     1     0     0     1     2
#3    U3     A    88     1     0     0     0     0     1