R多个列按

时间:2015-07-16 00:52:06

标签: r group-by transform shiny strsplit

我有一个如下所示的数据集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_timecityweekday分组的均值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())?

1 个答案:

答案 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并返回到已经提到的特定格式。