r - 使用 R 中 data.table 中的 max() 有条件地更改列的内容
问题描述
我有一个包含以下信息的 data.table:
data.table(id = c(rep(1,5)),
year = c(rep(2015,3), rep(2016,2)),
class = c(rep("A", 3), rep("B", 2)),
origin = c("Europe", "Asia", "Africa", "Europe", "Asia"),
count = c(30299, 3, 34, 2, 800))
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Asia 3
3: 1 2015 A Africa 34
4: 1 2016 B Europe 2
5: 1 2016 B Asia 800
然而,对于每一个id
, year
,class
只有一个位置是允许的。在这里,第一个组合具有三个位置:
1: 1 2015 A Europe 30299
2: 1 2015 A Asia 3
3: 1 2015 A Africa 34
第二个组合有两个位置:
4: 1 2016 B Europe 2
5: 1 2016 B Asia 800
我想更改位置,这样对于每个id
, year
,class
组合将使用最高的位置count
。这应该会产生一个像这样的表:
id year class origin count
1: 1 2015 A Europe 30299
2: 1 2015 A Europe 3
3: 1 2015 A Europe 34
4: 1 2016 B Asia 2
5: 1 2016 B Asia 800
如何做到这一点?我正在考虑将数据表拆分为列表列表,然后应用 lapply,但我确信有更好/更简单的解决方案?任何提示?
解决方案
DT[, origin := origin[which.max(count)], by = .(id, year, class)]
推荐阅读
- mql4 - 如何将发送订单从 mql4 转换为 mql5
- amp-html - AMP 从网页中删除政策声明
- python - 文件处理程序的日志级别与记录器的日志级别
- c# - 数据库级别的参数化查询会发生什么
- c# - WPF TreeView 子项不显示
- ruby-on-rails - 通过 Ruby 将 Active Admin 中的 jsoneditor 设为只读?
- reactjs - 带有 react-apexcharts 的点击事件
- regex - 正则表达式匹配我需要的文本之间的文本,最大字符数为 20
- django - 如何使用 Django 生成 Word 文档
- single-page-application - 有一种方法可以避免在 PWA 中的每个请求都下载 Spa Bundle