例如,我有一个数据框:
year month day
1 2006 12 29
2 2006 12 28
3 2006 12 27
4 2006 12 22
5 2006 12 21
6 2006 12 20
4 2006 11 22
5 2006 11 21
6 2006 11 20
我想找到该月份和年份中包含最多日期的行,因此期望输出为:
year month day
1 2006 12 29
2 2006 11 22
将有2007,2008等等。
我想使用聚合组但不成功。我可以请求帮助吗?
感谢;
感谢您的快速回复!我在这里有一个跟进问题: 如果我有4列,例如
year month day value
1 2006 12 29 0.1
2 2006 12 28 0.2
3 2006 12 27 0.3
4 2006 12 22 0.4
5 2006 12 21 0.5
6 2006 12 20 0.6
7 2006 11 22 0.7
8 2006 11 21 0.8
9 2006 11 20 0.9
并希望得到以下输出:
year month day value
1 2006 12 29 0.1
2 2006 11 22 0.7
我还可以使用聚合功能吗? 感谢;
答案 0 :(得分:2)
我们可以使用dplyr
library(dplyr)
df1 %>%
group_by(year, month) %>%
summarise(day = max(day))
答案 1 :(得分:1)
# Data
year = rep(2006, 9)
month = c(rep(12, 6), rep(11, 3))
day = c(29:27, 22:20, 22:20)
value = 1:9
df = data.frame(year, month, day, value)
# year month day value
# 1 2006 12 29 1
# 2 2006 12 28 2
# 3 2006 12 27 3
# 4 2006 12 22 4
# 5 2006 12 21 5
# 6 2006 12 20 6
# 7 2006 11 22 7
# 8 2006 11 21 8
# 9 2006 11 20 9
aggregate(day ~ year + month, data = df, FUN = max)
# year month day
# 1 2006 11 22
# 2 2006 12 29
~
的左侧是您要聚合的列,右侧是按进行分组。 FUN =
参数指定用于聚合的函数。
如果您希望相应的value
也包含在汇总数据中,您可以使用aggregate
和merge
这样的组合:
merge(aggregate(day ~ year + month, data = df, FUN = max), df)
# year month day value
# 1 2006 11 22 7
# 2 2006 12 29 1
当然,如果你有更复杂的数据集,你可以指定merge
的参数来准确地给你你想要的东西。