我尝试了几种不同的方法来获得平均值的摘要表半小时,类似于平均数据透视表。我首选的方法是使用聚合,但我似乎只得到顶行的平均值。
数据如链接所示,其中可以忽略组和消息。 See below.
我正在使用的代码是......
Data <- read_csv("P:/Book3.csv", col_types = cols(Date = col_date(format = "%m/%d/%Y"),
Time = col_time(format = "%H:%M:%S")))
View(Data)
class(Data)
[1] "tbl_df" "tbl" "data.frame"
aggregate(Data[, 3:4], list(Data$Time), mean)
Group.1 Calls Estimated_Calls
1 08:30:00 15.38889 14.55556
您会注意到单行,但理想情况下,输出每次都会有平均值。
任何帮助都会很棒。感谢。
答案 0 :(得分:0)
我更喜欢使用data.table
进行摘要操作:
setDT(Data)
Data[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)),
by=.(Group, Time)]
这将按组和时间分组,这意味着您将为每个组和时间组合分配一行。
使用虚拟数据(时间使用3“小时”;还将by
更改为keyby
以进行排序):
set.seed(48)
df1 <- data.table(Group = sample(LETTERS[1:3],10,T),
Time = sample(1:3,10,T),
Calls = sample(1:50,10,T),
Estimated_Calls = sample(1:50,10,T))
df1[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)),
keyby=.(Group, Time)]
输出:
Group Time Mean_Calls Mean_Est_Calls
1: A 2 27.00000 22.00000
2: A 3 34.66667 25.66667
3: B 2 26.00000 6.50000
4: B 3 20.00000 1.00000
5: C 2 35.50000 32.00000
使用aggregate
:
df2 <- aggregate(df1[,3:4], by=with(df1,list(Group,Time)),mean)
答案 1 :(得分:0)
我喜欢使用dplyr
库来解决这类问题:
library(dplyr)
Data %>% group_by(Time) %>%
summarise(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls))
我发现管道%>%
使代码更容易阅读(一旦你习惯它)。这是dplyr
库的一项功能。