我有一个如下所示的数据集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
我想找到wait_time
,city
和weekday
分组的均值time
。基本上,根据您的城市,例如,周一的平均等待时间是多少?那么星期二?
我在time
栏中创建x_output$timestamp
栏时遇到了困难;我目前正在使用:
x_output$time <- strsplit(as.character(x_output$timestamp), split = " ")[[1]][2]
然而,这只是简单地说&#34; 09:00&#34;在每一行,而不是每一行的正确时间。
其次,我需要一个三向分组来找到给定城市,工作日和时间的平均wait_time。这是在python pandas中相当简单的事情,但是我可以在R中找到很少的文档(不幸的是我需要在R中执行它,而不是python)。
我已经研究过使用data.table
,但似乎没有用。是否有像python pandas中那样的简单函数(例如。df.groupby(['col1', 'col2', 'col3']).mean()
)?
答案 0 :(得分:0)
按城市,工作日,时间分组的平均值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)]
我在给定
的time
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')
会给你&#34; HH:MM:SS&#34;作为你的时间格式。如果您想要使用自定义时间格式,最好将timestamp
字符串转换为POSIXct并返回到已经提到的特定格式。