尝试将月份编号转换为日期集中的月份名称
Posted
技术标签:
【中文标题】尝试将月份编号转换为日期集中的月份名称【英文标题】:Trying to convert month number to month name in a date set 【发布时间】:2021-08-08 15:18:38 【问题描述】:当我尝试使用以下代码用月份名称替换月份编号时,我得到了 NA 值:
total_trips_v2$month <- ordered(total_trips_v2$month, levels=c("Jul","Aug","Sep","Oct", "Nov","Dec","Jan", "Feb", "Mar","Apr","May","Jun"))
我正在处理一个大数据集,其中月份列是 char 数据类型,月份编号为 '06'、'07' 等等,从 06 开始。
我什至不确定我使用的代码中的有序函数,它的真正作用。我在某处看到它并使用它。我试图查找代码以替换行中的特定值,但看起来很混乱。 谁能帮我解决这个问题?
【问题讨论】:
你能用dput(head(total_trips_v2$month, 20))
的输出编辑问题吗?
@ruibarradas 你能告诉我这到底会做什么吗?我只看到“07”打印了 20 次。
表示前20个月都是"07"
。无论如何,你已经有了一个有效的答案,所以它不再重要了。请参阅我对答案的评论。
【参考方案1】:
使用数据类型有时会让人感到困惑,但它可以帮助您实现想要实现的目标。因此,请确保您了解如何在不同类型之间转换!
R 中内置了一些“帮助程序”来处理月份和月份的名称。
下面我们的数据框中有一个“字符”向量,即 df$month。
R 中的辅助向量是 month.name
(完整月份名称)和 month.abb
(缩写月份名称)。
您可以通过调用向量的第 n 个位置的元素来索引向量。
因此,month.abb[6]
将返回“Jun”。
我们使用它来强制月份为“数字”,然后用缩写名称重新编码。
# simulating some data
df <- data.frame(month = c("06","06","07","09","01","02"))
# test index month name
month.abb[6]
# check what happens to our column vector - for this we coerce the 06,07, etc. to numbers!
month.abb[as.numeric(df$month)]
# now assign the result
df$month_abb <- month.abb[as.numeric(df$month)]
这会产生:
df
month month_abb
1 06 Jun
2 06 Jun
3 07 Jul
4 09 Sep
5 01 Jan
6 02 Feb
【讨论】:
@SarthakDev 当someone answers你的问题时该怎么办。 你可以回复他们的回答然后关闭问题:)【参考方案2】:lubridate
包还可以帮助您提取日期时间对象的某些组件,例如月份编号或名称。
在这里,我做了一些示例日期:
tibble(
date = c('2021-01-01', '2021-02-01', '2021-03-01')
) %>%
. ->> my_dates
my_dates
# # A tibble: 3 x 1
# date
# <chr>
# 2021-01-01
# 2021-02-01
# 2021-03-01
首先我们需要将这些字符格式的值转换为日期格式的值。我们使用lubridate::ymd()
来执行此操作:
my_dates %>%
mutate(
date = ymd(date)
) %>%
. ->> my_dates_formatted
my_dates_formatted
# # A tibble: 3 x 1
# date
# <date>
# 2021-01-01
# 2021-02-01
# 2021-03-01
请注意,列名 (date
) 下打印的格式已从 <chr>
更改为 <date>
。
现在日期是<date>
格式,我们可以使用lubridate::month()
提取不同的组件。详情请见?month
。
my_dates_formatted %>%
mutate(
month_num = month(date),
month_name_abb = month(date, label = TRUE),
month_name_full = month(date, label = TRUE, abbr = FALSE)
)
# # A tibble: 3 x 4
# date month_num month_name_abb month_name_full
# <date> <dbl> <ord> <ord>
# 2021-01-01 1 Jan January
# 2021-02-01 2 Feb February
# 2021-03-01 3 Mar March
请参阅my answer to your other question here,但在 R 中使用日期时,最好将它们保留为默认的 YYYY-MM-DD 格式。这通常使计算和操作更加直接。如上所示的月份名称可以很好地制作标签,例如在制作图形和标记数据点或轴时。
【讨论】:
以上是关于尝试将月份编号转换为日期集中的月份名称的主要内容,如果未能解决你的问题,请参考以下文章