首页 > 解决方案 > 根据每个组中的流行度将所有唯一 ID 移动到同一组

问题描述

我有一个数据表,其中有几个 ID 都分配给一个组。但有些 ID 出现在多个组中:

library(data.table)
df = data.table(ID = c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D'),
                Group = c(1, 1, 2, 2, 2, 2, 2, 3, 3, 1, 1))

 #     ID       Group
 #  1:  A       1
 #  2:  A       1
 #  3:  A       2
 #  4:  B       2
 #  5:  B       2
 #  6:  B       2
 #  7:  C       2
 #  8:  C       3
 #  9:  C       3
 #  10:  D      1
 #  11:  D      1

现在,我想将出现在多个组中的 ID 移动到其观察次数最多的组中。因此,一个组中可以存在多个唯一 ID,而不是多个组中的唯一 ID。像这样:

 #     ID       Group
 #  1:  A       1
 #  2:  A       1
 #  3:  A       1
 #  4:  B       2
 #  5:  B       2
 #  6:  B       2
 #  7:  C       3
 #  8:  C       3
 #  9:  C       3
 #  10:  D      1
 #  11:  D      1

标签: r

解决方案


您可以获得每个.ID

library(data.table)

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

df[, Group := Mode(Group), ID]
df

#    ID Group
# 1:  A     1
# 2:  A     1
# 3:  A     1
# 4:  B     2
# 5:  B     2
# 6:  B     2
# 7:  C     3
# 8:  C     3
# 9:  C     3
#10:  D     1
#11:  D     1

推荐阅读