1

ID POSIXct(Date & Time) を含むデータ フレームがあります。

> myData

   Tpt_ID    Tpt_DateTime               Value
1  1         2013-01-01 15:17:21 CST    10
2  2         2013-01-01 15:18:32 CST    5
3  3         2013-01-01 16:00:02 CST    1
4  1         2013-01-02 15:10:11 CST    15
5  2         2013-02-02 11:18:32 CST    6
6  3         2013-02-03 12:00:02 CST    2
7  1         2013-01-01 19:17:21 CST    21
8  2         2013-02-02 20:18:32 CST    8
9  3         2013-02-03 22:00:02 CST    3

各日付と ID の最後の値を取得したい

例えば、

Tpt_ID   Tpt_DateTime               Value
2        2013-01-01 15:18:32 CST    5
3        2013-01-01 16:00:02 CST    1
1        2013-01-02 15:10:11 CST    15
1        2013-01-01 19:17:21 CST    21
2        2013-02-02 20:18:32 CST    8
3        2013-02-03 22:00:02 CST    3

データサンプル:

structure(list(Tpt_ID = c(1, 2, 3, 1, 2, 3, 1, 2, 3), Tpt_DateTime = structure(c(1357024641, 1357024712, 1357027202, 1357110611, 1359775112, 1359864002, 1357039041, 1359807512, 1359900002), class = c("POSIXct", "POSIXt"), tzone = ""), Value = c(10, 5, 1, 15, 6, 2, 21, 8, 3)), .Names = c("Tpt_ID", "Tpt_DateTime", "Value"), row.names = c(NA, 9L), class = "data.frame")
4

3 に答える 3

0

@ SimonO101の回答と同様の方法で機能する別のdata.tableソリューション-

library(data.table)
dt <- data.table( dt )
dt[ , Date:= as.Date( Tpt_DateTime ) ]

#indexing the data.table
setkey(dt,Tpt_ID,Date)
#mult = "last" returns te last row of each unique group as defined by the by argument
dt[dt[unique(dt), mult="last", which=TRUE]]

これは戻ります-

> dt[dt[unique(dt),,mult="last", which=TRUE]]
   Tpt_ID        Tpt_DateTime Value       Date
1:      1 2013-01-01 16:47:21    21 2013-01-01
2:      1 2013-01-02 12:40:11    15 2013-01-02
3:      2 2013-01-01 12:48:32     5 2013-01-01
4:      2 2013-02-02 17:48:32     8 2013-02-02
5:      3 2013-01-01 13:30:02     1 2013-01-01
6:      3 2013-02-03 19:30:02     3 2013-02-03
于 2013-11-01T16:57:45.830 に答える
0

そしてdata.tableなし...

x <- structure(list(Tpt_ID = c(1, 2, 3, 1, 2, 3, 1, 2, 3), Tpt_DateTime =    structure(c(1357024641, 1357024712, 1357027202, 1357110611, 1359775112, 1359864002, 1357039041, 1359807512, 1359900002), class = c("POSIXct", "POSIXt"), tzone = ""), Value = c(10, 5, 1, 15, 6, 2, 21, 8, 3)), .Names = c("Tpt_ID", "Tpt_DateTime", "Value"), row.names = c(NA, 9L), class = "data.frame")
x$ID_Date <- paste(x$Tpt_ID,as.Date(x$Tpt_DateTime),sep="_")
f <- function(id, mydf){
     tempdf <- mydf[mydf$ID_Date==id,]
     return(tempdf[which.max(tempdf$Tpt_DateTime),])
}
res <- as.data.frame(t(sapply(unique(x$ID_Date), f, mydf=x)))
rownames(res) <- NULL
res  
于 2013-11-01T16:58:51.333 に答える