r - 根据每个组中的流行度将所有唯一 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
解决方案
您可以获得每个.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
推荐阅读
- css - 防止 nginx 将 css 文件作为文本/纯文本提供
- python - 在 openCV 中优化彩色珠子的图像识别
- excel - 如何在 if 函数中保持相同的单元格引用,直到 if 函数为真/假?
- jquery - 将特定事件从子 iframe 捕获到父 iframe
- php - 函数 setTimezone 更改时区但不更改日期
- python - 在while循环中更新变量的问题
- javascript - 如何实现 JavaScript getUserMedia 存根以发送自定义音频字节
- python - ValueError:信号仅在主线程中有效
- scala - 通过拆分提取字符串和符号
- sql - 是否可以通过将列与另一个存在的临时表匹配来更改列?