我正在寻找一种方法来计算每个组中最常见的名称,然后将该组中的所有名称更改为最常见的名称,或者使用最常见的名称创建一个新列。在数据集中,常见名称中可能存在关联,因此在这些情况下,我希望它选择其中一个关联名称。例如:
示例数据如下所示:
first_name = c("John", "John", "John Smith", "Linda Dawn", "Linda Dawn", "Linda", "Linda", "Linda Dawn", "Jack", "Jack", "Jack B", "Jack B")
id = c(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3)
dt = data.table(cbind(first_name, id))
first_name id
1: John 1
2: John 1
3: John Smith 1
4: Linda Dawn 2
5: Linda Dawn 2
6: Linda 2
7: Linda 2
8: Linda Dawn 2
9: Jack 3
10: Jack 3
11: Jack B 3
12: Jack B 3
我的数据集中的名称也可能包含中间名。
我试过使用这个DescTools::Mode()
函数,如果最常用的名字没有联系,这个函数效果很好。使用这种方法,我得到以下输出:
dt[, first_name_new := Mode(first_name), by = id]
first_name id first_name_new
1: John 1 John
2: John 1 John
3: John Smith 1 John
4: Linda Dawn 2 Linda Dawn
5: Linda Dawn 2 Linda Dawn
6: Linda 2 Linda Dawn
7: Linda 2 Linda Dawn
8: Linda Dawn 2 Linda Dawn
9: Jack 3 <NA>
10: Jack 3 <NA>
11: Jack B 3 <NA>
12: Jack B 3 <NA>
有谁知道如何让<NA>
状态 Jack 或 Jack B 或其他技术来执行此任务?
提前致谢!