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