R 计算组和总体统计数据的干净方法
我不仅要计算不同数据组的R 计算组和总体统计数据的干净方法,r,dplyr,R,Dplyr,我不仅要计算不同数据组的中值,还要计算所有组的中值,并将结果存储在单个数据框中。虽然分别完成这些任务很容易,但我还没有找到一种干净的方法同时完成这两项任务 现在,我要做的是分别计算这两个统计数据;然后加入结果;如有必要,整理数据。如果我想知道每天和每月的延迟中值,下面是一个示例: library(dplyr) library(hflights) data(hflights) # Calculate both statistics separately per_day <- hfligh
中值
,还要计算所有组的中值
,并将结果存储在单个数据框中。虽然分别完成这些任务很容易,但我还没有找到一种干净的方法同时完成这两项任务
现在,我要做的是分别计算这两个统计数据;然后加入结果;如有必要,整理数据。如果我想知道每天和每月的延迟中值,下面是一个示例:
library(dplyr)
library(hflights)
data(hflights)
# Calculate both statistics separately
per_day <- hflights %>%
group_by(Year, Month, DayofMonth) %>%
summarise(Delay = mean(ArrDelay, na.rm = TRUE)) %>%
mutate(Interval = "Daily")
per_month <- hflights %>%
group_by(Year, Month) %>%
summarise(Delay = mean(ArrDelay, na.rm = TRUE)) %>%
mutate(Interval = "Monthly", DayofMonth = NA)
# Join into a single data.frame
my_summary <- full_join(per_day, per_month,
by = c("Year", "Month", "DayofMonth", "Interval", "Delay"))
my_summary
# Source: local data frame [377 x 5]
# Groups: Year, Month
#
# Year Month DayofMonth Delay Interval
# 1 2011 1 1 10.067642 Daily
# 2 2011 1 2 10.509745 Daily
# 3 2011 1 3 6.038627 Daily
# 4 2011 1 4 7.970740 Daily
# 5 2011 1 5 4.172650 Daily
# 6 2011 1 6 6.069909 Daily
# 7 2011 1 7 3.907295 Daily
# 8 2011 1 8 3.070140 Daily
# 9 2011 1 9 17.254325 Daily
# 10 2011 1 10 11.040388 Daily
# .. ... ... ... ... ...
库(dplyr)
图书馆(hflights)
数据(hflights)
#分别计算这两个统计数据
每天%
分组单位(年、月、月日)%>%
总结(延迟=平均值(ArrDelay,na.rm=真))%>%
变异(Interval=“Daily”)
每月%
分组单位(年、月)%>%
总结(延迟=平均值(ArrDelay,na.rm=真))%>%
变异(Interval=“Monthly”,DayofMonth=NA)
#连接到单个data.frame中
我的总结是一个一次性的表格。这在数据中非常简单。表格:
require(data.table)
setDT(hflights)[,{
mo_del <- mean(ArrDelay,na.rm=TRUE)
.SD[,.(DailyDelay = mean(ArrDelay,na.rm=TRUE),MonthlyDelay = mo_del),by=DayofMonth]
},by=.(Year,Month)]
# Year Month DayofMonth DailyDelay MonthlyDelay
# 1: 2011 1 1 10.0676417 4.926065
# 2: 2011 1 2 10.5097451 4.926065
# 3: 2011 1 3 6.0386266 4.926065
# 4: 2011 1 4 7.9707401 4.926065
# 5: 2011 1 5 4.1726496 4.926065
# ---
# 361: 2011 12 14 1.0293610 5.013244
# 362: 2011 12 17 -0.1049822 5.013244
# 363: 2011 12 24 -4.1457490 5.013244
# 364: 2011 12 25 -2.2976827 5.013244
# 365: 2011 12 31 46.4846491 5.013244
然后我们可以查看汇总表:
hflights[,.GRP,.(Year,Month,DayofMonth,DailyDelay,MonthlyDelay)]
# Year Month DayofMonth DailyDelay MonthlyDelay .GRP
# 1: 2011 1 1 10.0676417 4.926065 1
# 2: 2011 1 2 10.5097451 4.926065 2
# 3: 2011 1 3 6.0386266 4.926065 3
# 4: 2011 1 4 7.9707401 4.926065 4
# 5: 2011 1 5 4.1726496 4.926065 5
# ---
# 361: 2011 12 14 1.0293610 5.013244 361
# 362: 2011 12 17 -0.1049822 5.013244 362
# 363: 2011 12 24 -4.1457490 5.013244 363
# 364: 2011 12 25 -2.2976827 5.013244 364
# 365: 2011 12 31 46.4846491 5.013244 365
(这里需要在j
中放入一些内容,因此我使用了“按组”代码,.GRP
)而不是摘要
,您可以变异
,然后取消分组
,然后在下一个之前重新分组。没有示例数据就无法进行测试。谢谢,弗兰克。我将代码更改为使用hflights
数据集。另外,我很感谢你的建议。但是你认为这会更有效吗?嗯,我不太了解如何使dplyr
代码更有效;我使用data.table
来实现这一点。我刚才在想,也许您想在一个%%>%%
链中计算这两个统计信息。是的,一个%%>%%
就很好了,但我认为如果这两个步骤分开,代码的可读性会更好。因为似乎没有一种“标准”的方式来做我想做的事情,让我这样说:我更喜欢一致和高效的代码,而不是dplyr
。因此,如果data.table
是执行此任务的更好选择,我很高兴看到您的方法。好的,我添加了data.table
方法。在我看来,它非常可读,而且可能比单独计算和合并效率更高,当然是在内存方面。
hflights[,.GRP,.(Year,Month,DayofMonth,DailyDelay,MonthlyDelay)]
# Year Month DayofMonth DailyDelay MonthlyDelay .GRP
# 1: 2011 1 1 10.0676417 4.926065 1
# 2: 2011 1 2 10.5097451 4.926065 2
# 3: 2011 1 3 6.0386266 4.926065 3
# 4: 2011 1 4 7.9707401 4.926065 4
# 5: 2011 1 5 4.1726496 4.926065 5
# ---
# 361: 2011 12 14 1.0293610 5.013244 361
# 362: 2011 12 17 -0.1049822 5.013244 362
# 363: 2011 12 24 -4.1457490 5.013244 363
# 364: 2011 12 25 -2.2976827 5.013244 364
# 365: 2011 12 31 46.4846491 5.013244 365