当前位置:  开发笔记 > 编程语言 > 正文

按组分组的模态值(最常见)的简明R data.table语法

如何解决《按组分组的模态值(最常见)的简明Rdata.table语法》经验,为你挑选了1个好方法。

什么是高效优雅的data.table语法,用于查找每个id的最常见类别?我保留一个表示NA位置的布尔矢量(用于其他目的)

dt = data.table(id=rep(1:2,7), category=c("x","y",NA))
print(dt)

在这个玩具示例中,忽略NA,x是for id==1yfor的常见类别id==2.



1> Jaap..:

如果你想忽略NA它们,你必须先用!is.na(category),分组idcategory(by = .(id, category))排除它们,并用以下方法创建一个频率变量.N:

 dt[!is.na(category), .N, by = .(id, category)]

这使:

   id category N
1:  1        x 3
2:  2        y 3
3:  2        x 2
4:  1        y 2

订购此项id将为您提供更清晰的图片:

 dt[!is.na(category), .N, by = .(id, category)][order(id)]

这导致:

   id category N
1:  1        x 3
2:  1        y 2
3:  2        y 3
4:  2        x 2

如果您只想要指示最佳结果的行:

dt[!is.na(category), .N, by = .(id, category)][order(id, -N), head(.SD,1), by = id]

要么:

dt[!is.na(category), .N, by = .(id, category)][, .SD[which.max(N)], by = id]

两者都给:

   id category N
1:  1        x 3
2:  2        y 3

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有