在R中操作具有日期-时间变量的数据帧



我有一个类似的数据帧

  ID       DATE         TS_EVENT              X   Y  Z
ID0026A  2013-01-03 2013-01-03 8:31:09 PM     25   0  0
ID0026A  2013-01-03 2013-01-03 8:31:09 PM      0   0  0
ID0026A  2013-01-03 2013-01-03 11:22:55 PM     0   0  0
ID0026A  2013-01-03 2013-01-03 11:36:05 PM     0   0  0
ID0026A  2013-01-03 2013-01-03 11:36:05 PM     0   0  0
ID0026A  2013-03-27 2013-01-03 11:36:05 PM   100 354 25

现在我想返回一个数据帧,它将有四列ID,DATE,X,Y和Z。但是列"ID"将包含唯一的ID,DATE将包含该ID的最新日期,其余列的值将对应于该特定ID的最晚时间戳(TS_EVENT)。

例如,在这种情况下,对于ID0026A,数据帧应该看起来像

   ID       DATE       X   Y  Z
ID0026A  2013-01-03    0   0  0
ID0026A  2013-03-27  100 354 25

我的数据帧包含120万条记录和6000个唯一ID

注:ID的str为字符,DATE的str是日期,TS_EVENT的str则为字符,其余为数字

因此,首先我想将TS_EVENT转换为日期-时间对象,然后创建所需的数据帧。

如何在R中执行此操作?

根据@PauloCardoso的请求,这里是data.table解决方案

library(data.table)
idx <- setDT(df)[, .I[TS_EVENT == max(TS_EVENT)], by = c("ID", "DATE")]$V1
unique(df[idx, -3, with = F], by = c("ID", "DATE"))
## ID       DATE   X   Y  Z
## 1: ID0026A 2013-01-03   0   0  0
## 2: ID0026A 2013-03-27 100 354 25

带ddply

d$DATE <- ymd(d$DATE)
d$TS_EVENT <- ymd_hms(d$TS_EVENT)
plyr::ddply(d, .(ID, DATE), summarise, ts = max(TS_EVENT), date = max(DATE),
            x = tail(X,1), y = tail(Y, 1), z = tail(Z, 1))
       ID       DATE                  ts       date   x   y  z
1 ID0026A 2013-01-03 2013-01-03 11:36:05 2013-01-03   0   0  0
2 ID0026A 2013-03-27 2013-01-03 11:36:05 2013-03-27 100 354 25

这项工作与dplyr以及

d %.%
  dplyr:::group_by(DATE, ID) %.% 
  dplyr:::summarise(ts = max(TS_EVENT), date = max(DATE),
            x = tail(X,1), y= tail(Y, 1), z=tail(Z, 1))

        DATE      ID                  ts       date   x   y  z
1 2013-01-03 ID0026A 2013-01-03 11:36:05 2013-01-03   0   0  0
2 2013-03-27 ID0026A 2013-01-03 11:36:05 2013-03-27 100 354 25

谢谢@Arun!!

编辑我希望通过data.table方法来看到这一点。我做不到。

试试这样的东西(t是你的数据帧):

 t <- t[ !duplicated(t[c("ID","DATE")], fromLast=TRUE), ][c("ID","DATE","X","Y","Z")]

重复的函数将ID和DATE组合成一个唯一的键,并获得最后一个条目(即该ID的最新DATE)。然后将所需字段添加到数据框中。希望这能有所帮助。

输出:

ID       DATE   X   Y  Z
ID0026A 2013-01-03   0   0  0
ID0026A 2013-03-27 100 354 25

相关内容

  • 没有找到相关文章

最新更新