我在 R Studio 中使用 Lubridate,当我使用 group by(与 dplyr)按月份或工作日分组时,它会自动按字母顺序排序。我怎样才能将其更改为日期订单?
这是代码:
df %>% group_by(months(DateColumn)) %>% summarise(Freq=n())
DateColumn 具有以下结构:
当我查看结果时,这就是顺序。 (地块也一样)
在
summarise
步骤之后,我们可以通过 arrange
与内置 match
(月份顺序正确)来 month.name
行,然后使用 factor
将“月份”转换为 levels
指定(以便稍后可以在 ggplot
中使用,以与 levels
相同的顺序订购)
library(tidyverse)
df %>%
group_by(Months = months(DateColumn)) %>%
summarise(n = n()) %>%
arrange(match(month.name, Months)) %>%
mutate(Months = factor(Months, levels = Months))
df <- data.frame(DateColumn = seq(as.POSIXct("2015-05-10"),
length.out = 30, by = '1 month'))
使用@akrun 答案中的数据。这是一个替代方案:
df <- data.frame(DateColumn = seq(as.POSIXct("2015-05-10"),
length.out = 30, by = '1 month'))
df %>%
mutate(Date=month(DateColumn,label=T),ID=row_number()) %>%
group_by(Date) %>%
arrange(Date) %>%
select(-DateColumn)
您在这里根本没有使用 lubridate。如果你是,那么它就会按照你想要的方式工作。
months
是 R 基函数。您想要的功能是 month
,带有 label=TRUE
。
df |> group_by(month(DateColumn,label=TRUE)) |> summarise(Freq=n())
这给出了以下输出(我没有你的确切数据,所以我使用了我自己的):
`month(timestamp, label = TRUE)` Freq
<ord> <int>
1 Jan 10
2 Mar 25
3 Apr 6
4 Aug 15
5 Sep 12
6 Oct 10
7 Nov 9