如何在R中排序日

时间:2016-12-06 04:27:22

标签: r date

例如,我有一个数据框:

  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

我还可以使用聚合功能吗? 感谢;

2 个答案:

答案 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也包含在汇总数据中,您可以使用aggregatemerge这样的组合:

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的参数来准确地给你你想要的东西。