【问题标题】:in R data.table - mark/change column based on date by group在 R data.table 中 - 基于日期按组标记/更改列
【发布时间】:2014-05-19 00:07:49
【问题描述】:

我正在尝试使用 data.table 标记每个 ID 的最大和最小观察日期。虽然我认为这将是一个直接的练习,但我真的不明白为什么我没有得到我希望的结果:出于某种原因,以下 data.table 命令仅标记整体最小值和最大值,而不是“每个 ID”,即使表明了这一点:

可重现的示例(通过 ID 标记最大值):

library(data.table)

date1 = as.POSIXct(Sys.Date(), "%m-%d-%Y-%X")
date2 = date1 - 70000
date3 = date1 - 7000
date4 = date1 + 90000

DT = data.table(ID= rep(1:2,each = 3), Date=c(date1,date2,date3,date4,date1,date2))

# create position marker (2 means middle value for date - not min/not max)
DT[,Position:=2]

# change position marker to 3 if latest date
DT[Date==max(Date),Position:=3, by=ID]

为什么 data.table 不考虑“by=ID”部分?我忽略了什么?

版本: 数据表 1.9.2 R:3.0.3

【问题讨论】:

  • 我认为它先过滤数据,然后执行by 语句

标签: r data.table


【解决方案1】:

我相信它正在过滤数据,然后是by 语句。也许你想要的是:

DT[, Position := ifelse(Date==max(Date),3,2), by= ID]

【讨论】:

  • 确实,i 参数在by 参数之前处理
  • 感谢你们的帮助。 .. 通常我在直观地使用 i,j,by 时相处得很好(data.table 包是 R 中最有用的工具之一)!这次只是失败了……很高兴知道现在的过滤顺序!
猜你喜欢
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2021-11-26
  • 2016-07-25
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多