如何解决将列中的名称更改为每组最常用的名称
我正在寻找一种方法来计算每个组中最常用的名称,然后将该组中的所有名称更改为最常用的名称,或者使用最常用的名称创建一个新列。在数据集中,频繁名称可能存在联系,因此在这些情况下,我希望它选择任何一个联系名称。例如:
示例数据如下所示:
first_name = c("John","John","John Smith","Linda Dawn","Linda","Jack","Jack B","Jack B")
id = c(1,1,2,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,或者其他技术来执行此任务?
提前致谢!
解决方法
Mode()
在平局时返回 2 个值。只需从 Mode()
中取出第一个:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。