gpt4 book ai didi

R data.table 查找一组数据的模式

转载 作者:行者123 更新时间:2023-12-04 09:16:25 24 4
gpt4 key购买 nike

我有以下数据表 x

id1 id2
a x
a x
a y
b z

对于 id1, id2 的每个组合,我可以通过以下方式找到实例数
x[,list(
freq = .N
),by = "id1,id2"]

以上将产生
a x 2
a y 1
b z 1

接下来我想为每个 id1 找到最频繁的 id2,即模式。所以预期的结果是
 a x 2
b z 1

我可以绕圈子到达那里,但是有没有办法在 id1 级别放置序列号?或者一些这样的黑客让我高效快速地做到这一点,也许在上面显示的第一步?
提前致谢

最佳答案

我会这样做:

setkey(dt[, list(freq = .N), by=list(id1, id2)], 
id1, freq)[J(unique(id1)), mult="last"]
id1 id2 freq
1: a x 2
2: b z 1

思路是先拿到 freq列(正如您所做的那样)。然后 setkey在由此产生的 data.table带列 id1freq .这将排序 freq已经是升序了。有了这个,我们就可以做一个 by-without-by子集并将其与 mult="last" 结合起来(因为对于每个组,最后一个值将是最大的,因为它按升序排序)。

这将节省一个 sort每个分组的步骤随着组数量的增加而变得耗时。请注意,这不处理关系。也就是说,如果你有相同的 id1两个相等的最大值,则只返回一个。

关于R data.table 查找一组数据的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com