0
> dataframe

    time        value                date
1      2           28 2013-07-08 15:13:35
2      4            8 2013-07-08 15:14:06
3      7            2 2013-07-08 15:43:05
4      8           25 2013-07-09 16:30:41
5     11           12 2013-07-09 19:04:40
6     14           41 2013-07-09 19:20:14
7     18           12 2013-07-10 00:39:04
8     22           12 2013-07-10 08:27:02

データフレーム内の毎日の最後のエントリをサブセット化する方法を知っている人はいますか? すなわち、以下を取得します。

    time        value                date
3      7            2 2013-07-08 15:43:05
6     14           41 2013-07-09 19:20:14
8     22           12 2013-07-10 08:27:02

どうもありがとう !

4

2 に答える 2

2

でこれを行うのが好きdata.tableです。data.frameあなたが と呼ばれると仮定しましょうdf...

#  Load required package
require( data.table )
dt <- data.table( df )

#  Make dates out of your date-time column
dt[ , date1 := as.Date( date ) ]

#  Subset to last row in each group
dt[ , .SD[.N] , by = date1 ]
#        date1 time value                date
#1: 2013-07-08    7     2 2013-07-08 15:43:05
#2: 2013-07-09   14    41 2013-07-09 19:20:14
#3: 2013-07-10   22    12 2013-07-10 08:27:02
于 2013-11-04T16:07:34.460 に答える
1

byこれは、とを使用した基本的な R の方法tailです。

df<-read.table(text="    time        value                date
1      2           28 '2013-07-08 15:13:35'
2      4            8 '2013-07-08 15:14:06'
3      7            2 '2013-07-08 15:43:05'
4      8           25 '2013-07-09 16:30:41'
5     11           12 '2013-07-09 19:04:40'
6     14           41 '2013-07-09 19:20:14'
7     18           12 '2013-07-10 00:39:04'
8     22           12 '2013-07-10 08:27:02'", header=TRUE, stringsAsFactors=FALSE)

days <- cut(as.POSIXct(df$date), breaks='days')
results <- by(df, INDICES=days, FUN=tail, n=1)
do.call(rbind, results)

#            time value                date
# 2013-07-08    7     2 2013-07-08 15:43:05
# 2013-07-09   14    41 2013-07-09 19:20:14
# 2013-07-10   22    12 2013-07-10 08:27:02
于 2013-11-04T16:14:53.507 に答える