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
你会注意到单行线,但是理想的输出将会对每一次的平均值。
任何帮助将是伟大的。谢谢。
我喜欢使用dplyr
库for pro这种blems:
library(dplyr)
Data %>% group_by(Time) %>%
summarise(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls))
我找到管%>%
使得代码更易于阅读(一旦你习惯了它)。这是dplyr
库的一项功能。
工作。非常感谢! – Lindon
我更喜欢使用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)
非常感谢。我会用这个,但有一些麻烦得到data.table包安装正确(安装,但似乎从来没有找到函数)。搜索网络,这似乎是一个常见问题。尽管这很了解! – Lindon
我们可以使用'summarise_all','summarise_at'或'summarise_if'和'group_by'来聚合'dplyr'中的数据。如果你可以共享'Book3.csv',我们可以演示如何做到这一点。 – www
包含您的数据而不是数据图片总是更好。尝试'dput(Data)'并编辑你的问题以包含该命令的输出。 – lebelinoz