R Lubridate 默认按字母顺序排列月份和工作日

问题描述 投票:0回答:3

我在 R Studio 中使用 Lubridate,当我使用 group by(与 dplyr)按月份或工作日分组时,它会自动按字母顺序排序。我怎样才能将其更改为日期订单?

这是代码:

df %>% group_by(months(DateColumn)) %>% summarise(Freq=n())

DateColumn 具有以下结构:

当我查看结果时,这就是顺序。 (地块也一样)

r data-analysis lubridate
3个回答
1
投票

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'))

1
投票

使用@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)

0
投票

您在这里根本没有使用 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
© www.soinside.com 2019 - 2024. All rights reserved.