r - 按组和条件 data.table 编辑
问题描述
如何编辑每个组的最大值?看起来我在这里按最大“日期”进行子集,而不是每年的最大日期:
dt = data.table(date = c('2001-01-01', '2001-01-02', '2002-01-01', '2002-01-02'), value = 1, year = c(2001, 2001, 2002, 2002))
dt[date == max(date), value := 2, by =. (year)]
# date value year
# 1: 2001-01-01 1 2001
# 2: 2001-01-02 1 2001
# 3: 2002-01-01 1 2002
# 4: 2002-01-02 2 2002
而不是预期的:
# date value year
# 1: 2001-01-01 1 2001
# 2: 2001-01-02 2 2001
# 3: 2002-01-01 1 2002
# 4: 2002-01-02 2 2002
解决方案
因此,data.table 的主要“参数”是 part i
、j
和 by,通常i
并且j
仅由它们的位置引用:DT[i, j, by]
。您的代码不起作用,因为i
(过滤器)在 by 之前进行了评估。因此,只有 j 受 by 参数的影响。
一种可能的解决方案:
dt[, value := fifelse(date == max(date), 2, 1), by = year]
通过考虑 i、j 等术语,如果顺序不寻常,您可以始终使用参数的名称。on
例如,当您使用和时会派上用场.SDcols
。
dt[i = 1:4, j = value := fifelse(date == max(date), 2, 1), by = year]
dt[by = year, j = value := fifelse(date == max(date), 2, 1), i = 1:4]
推荐阅读
- angular - ERROR 错误:未找到 TestComponent 的组件工厂
- javascript - NumberFormat 返回将数字转换为货币的错误格式
- java - 如何在 kubernetes 的集群模式下通过 java 代码从 spark 应用程序获取正确的退出代码
- java - 如何将 JButton 按钮添加到视图
- powershell - Powershell在文件中移动行
- javascript - 可拖动图像到输入字段
- python-3.x - 将批量大小增加到 1 以上时 Pytorch 中的 RuntimeError
- eclipse-plugin - 如何以编程方式调用 SWT 工具栏 AS_DROP_DOWN 按钮菜单?
- android - 在 BottomSheetDialog 中充气 RecyclerView
- full-text-search - ArangoSearch 支持多字段搜索