R多列分组依据

R multiple columns group by

我有一个数据集 x_output,如下所示:

          timestamp   city wait_time weekday
2015-07-14 09:00:00 Boston       1.4 Tuesday
2015-07-14 09:01:00 Boston       2.5 Tuesday
2015-07-14 09:02:00 Boston       2.8 Tuesday
2015-07-14 09:03:00 Boston       1.6 Tuesday
2015-07-14 09:04:00 Boston       1.5 Tuesday
2015-07-14 09:05:00 Boston       1.4 Wednesday

我想找到按 cityweekdaytime 分组的平均值 wait_time。基本上,考虑到您所在的城市,例如,星期一的平均等待时间是多少?然后是星期二?

鉴于 x_output$timestamp,我在创建 time 列时遇到困难;我目前正在使用:

x_output$time <- strsplit(as.character(x_output$timestamp), split = " ")[[1]][2]

但是,这只是将“09:00”放在每一行中,而不是每一行的正确时间。

其次,我需要进行 3 向分组以找到给定城市、工作日和时间的平均值 wait_time。这在 python pandas 中相当简单,但我在 R 中找不到关于它的文档(不幸的是我需要在 R 中做,而不是 python)。

我研究过使用 data.table,但似乎没有效果。是否有像 python pandas 中那样的简单函数(例如 df.groupby(['col1', 'col2', 'col3']).mean())?

均值 wait_time 按城市、工作日、时间分组:

library(plyr)
ddply(x_output, .(city, weekday, time), summarize, avg=mean(wait_time))

如果你想要data.table

x_output[, list(avg=mean(wait_time)), .(city, weekday, time)]

I'm having difficulty creating the time column given x_output$timestamp

嗯,time 列应该包含什么?只是 timestamp 的时间部分? timestamp 是 POSIXct 还是字符串?

如果是POSIXct,那么直接转换成字符即可,指定时间格式:

x_output$time <- as.character(x_output$timestamp, '%H:%M')
# or as.factor(as.character(...)) if you need it to be a factor.
# in data.table: x[, time:=as.character(timestamp, '%H:%M')]

这将使 time 列成为包含小时和分钟的字符串。有关将该日期时间转换为字符串的更多选项,请参阅 ?strptime(例如,如果您想要包含秒数)。

如果是字符串,你可以strsplit并提取第二部分:

vapply(strsplit(x_output$timestamp, ' '), '[', i=2, 'template')

这将为您提供 "HH:MM:SS" 作为您的时间格式。如果你想做一个自定义时间格式,可能最好将你的 timestamp 字符串转换成 POSIXct 并返回到已经提到的特定格式。