r-将列中的名称更改为每个组中最频繁的名称



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

样本数据如下:

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,或者其他执行此任务的技术吗?

提前感谢!

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

相关内容

  • 没有找到相关文章

最新更新