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
我想找到按 city
、weekday
和 time
分组的平均值 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 并返回到已经提到的特定格式。
我有一个数据集 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
我想找到按 city
、weekday
和 time
分组的平均值 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 givenx_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 并返回到已经提到的特定格式。