【发布时间】:2016-04-27 15:08:57
【问题描述】:
我正在尝试使用 dplyr 来总结基于 2 个组的数据集:“年份”和“区域”。这是数据集的样子:
Year Area Num
1 2000 Area 1 99
2 2001 Area 3 85
3 2000 Area 1 60
4 2003 Area 2 90
5 2002 Area 1 40
6 2002 Area 3 30
7 2004 Area 4 10
...
最终结果应该是这样的:
Year Area Mean
1 2000 Area 1 100
2 2000 Area 2 80
3 2000 Area 3 89
4 2001 Area 1 80
5 2001 Area 2 85
6 2001 Area 3 59
7 2002 Area 1 90
8 2002 Area 2 88
...
请原谅“平均值”的值,它们是编造的。
示例数据集的代码:
df <- structure(list(
Year = c(2000, 2001, 2000, 2003, 2002, 2002, 2004),
Area = structure(c(1L, 3L, 1L, 2L, 1L, 3L, 4L),
.Label = c("Area 1", "Area 2", "Area 3", "Area 4"),
class = "factor"),
Num = structure(c(7L, 5L, 4L, 6L, 3L, 2L, 1L),
.Label = c("10", "30", "40", "60", "85", "90", "99"),
class = "factor")),
.Names = c("Year", "Area", "Num"),
class = "data.frame", row.names = c(NA, -7L))
df$Num <- as.numeric(df$Num)
我尝试过的事情:
df.meanYear <- df %>%
group_by(Year) %>%
group_by(Area) %>%
summarize_each(funs(mean(Num)))
但它只是用平均值代替每个值,而不是预期的结果。
如果可能,请提供替代方法(即非 dplyr)方法,因为我还是 R 新手。
【问题讨论】:
-
如果您想同时按年份和地区分组,请使用
group_by(Year, Area)而不是单独的group_by语句。连续group_by的结果与只运行最后一个相同。 -
我想你想要
df %>% group_by(Year, Area) %>% summarize(mean = mean(Num))。在基础R中,您应该能够做到:aggregate(data = df, Num ~ Year + Area, mean)。 -
df2 <- ddply(df, .(Year, Area), summarize, Mean=mean(Num))这在 plyr 中不起作用吗? -
@RTB 这是一个
plyr操作,不是dplyr,但它相当于@JasonAizkalnsdplyr代码。 -
好的,我刚刚拍到了,谢谢!
标签: r