R 将列中的名称更改为每个组最常用的名称

R 将列中的名称更改为每个组最常用的名称,r,data.table,word-frequency,desctools,R,Data.table,Word Frequency,Desctools,我正在寻找一种方法来计算每个组最频繁的名称,然后将此组中的所有名称更改为最频繁的名称,或者使用最频繁的名称创建一个新列。在数据集中,频繁名称中可能有联系,因此在这些情况下,我希望它选择其中一个联系名称。例如: 示例数据如下所示: first_name = c("John", "John", "John Smith", "Linda Dawn", "Linda Dawn", "Linda&

我正在寻找一种方法来计算每个组最频繁的名称,然后将此组中的所有名称更改为最频繁的名称,或者使用最频繁的名称创建一个新列。在数据集中,频繁名称中可能有联系,因此在这些情况下,我希望它选择其中一个联系名称。例如:

示例数据如下所示:

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))
我的数据集中的名称也可能包含中间名

我尝试过使用
DescTools::Mode()
函数,如果在最常用的名称中没有关联,那么该函数可以很好地工作。使用此方法,我得到以下输出:

dt[, first_name_new := Mode(first_name), by = id]
first\u name id first\u name\u new
约翰:约翰
约翰:约翰
约翰·史密斯
琳达·道恩2琳达·道恩
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
10:Jack 3
11:Jack B 3
12:Jack B 3
是否有人知道如何使用
来声明Jack或Jack B,或者使用其他技术来执行此任务

提前谢谢

Mode()
出现平局时返回2个值。只需从
模式()中选择第一个:


你为什么要回NAJack@akrun函数
DescTools::Mode
在这里返回,因为频率之间存在联系。我希望NA要么是Jack要么是Jack B,因为我不介意它选择哪一个。我认为你需要一种比预期容易得多的基于距离的方法!完全没有意识到它将它们存储为向量。非常感谢@VitaminB16:D
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>
dt[, first_name_new := Mode(first_name)[1], by = id]

> dt
    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           Jack
10:       Jack  3           Jack
11:     Jack B  3           Jack
12:     Jack B  3           Jack