R,引用列中的所有值的集合总结(而不是仅一个)

问题描述:

我尝试了几种不同的方法来获取半小时平均值的汇总表,类似于平均数据透视表。我最喜欢的方法是聚合,但我似乎没有得到任何东西,但顶部行的平均值。R,引用列中的所有值的集合总结(而不是仅一个)

数据如链接所示,其中组和消息可以忽略。 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

我们可以使用'summarise_all','summarise_at'或'summarise_if'和'group_by'来聚合'dplyr'中的数据。如果你可以共享'Book3.csv',我们可以演示如何做到这一点。 – www

+0

包含您的数据而不是数据图片总是更好。尝试'dput(Data)'并编辑你的问题以包含该命令的输出。 – lebelinoz

我喜欢使用dplyr库for pro这种blems:

library(dplyr) 
Data %>% group_by(Time) %>% 
    summarise(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)) 

我找到管%>%使得代码更易于阅读(一旦你习惯了它)。这是dplyr库的一项功能。

+1

工作。非常感谢! – Lindon

我更喜欢使用data.table像这样总结操作:

setDT(Data) 

Data[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)), 
    by=.(Group, Time)] 

由集团和长时间这样,会组,这意味着你将有一行集团和时间的每个组合。

用哑数据(使用3 “小时” 为时间;也改变bykeyby排序):

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) 
+0

非常感谢。我会用这个,但有一些麻烦得到data.table包安装正确(安装,但似乎从来没有找到函数)。搜索网络,这似乎是一个常见问题。尽管这很了解! – Lindon