无法在 R 中设置天数和日期名称(日期始终为字符)

Posted

技术标签:

【中文标题】无法在 R 中设置天数和日期名称(日期始终为字符)【英文标题】:Can't set number of day and name of day in R (date always character) 【发布时间】:2021-10-30 23:30:44 【问题描述】:

要重现的样本数据

a=structure(list(date = c("01.01.2021", "02.01.2021", "03.01.2021", 
"04.01.2021", "05.01.2021", "06.01.2021", "07.01.2021", "08.01.2021", 
"09.01.2021", "10.01.2021", "11.01.2021", "12.01.2021", "13.01.2021", 
"14.01.2021", "15.01.2021", "16.01.2021", "17.01.2021", "18.01.2021", 
"19.01.2021", "20.01.2021"), sales_count = c(10L, 4L, 8L, 6L, 
4L, 4L, 4L, 3L, 1L, 5L, 2L, 10L, 5L, 9L, 2L, 8L, 5L, 6L, 8L, 
3L)), class = "data.frame", row.names = c(NA, -20L))

为什么当我加载数据时,日期是字符? 我得到了错误。 我的尝试

a$date = as.Date (a$date) l charToDate (x) 中的错误: 字符串不是标准的明确格式

Error in charToDate (x):
   character string is not in a standard unambiguous format

我在 SO 中看到了许多类似的帖子,但这些解决方案对我没有帮助。 如何解决这个错误,那个日期是

date     : Date, format: "2021-01-20" ...

然后如何为每个日期分配日期名称和天数? 确实是我想要的输出,例如

sales_count date    day_num weekday
8        2021-01-20   3 Wednesday

谢谢。

【问题讨论】:

help("as.Date") 解释了format 参数,该解释包含指向strptime 的链接,该链接显示了如何指定格式。 成功转换为 Dates 后,您只需使用 weekdays 函数即可。 【参考方案1】:

您可以使用以下解决方案:

library(dplyr)

a %>%
  mutate(date = as.Date(date, "%d.%m.%Y"), 
         weekday = weekdays(date))

         date sales_count   weekday
1  2021-01-01          10    Friday
2  2021-01-02           4  Saturday
3  2021-01-03           8    Sunday
4  2021-01-04           6    Monday
5  2021-01-05           4   Tuesday
6  2021-01-06           4 Wednesday
7  2021-01-07           4  Thursday
8  2021-01-08           3    Friday
9  2021-01-09           1  Saturday
10 2021-01-10           5    Sunday
11 2021-01-11           2    Monday
12 2021-01-12          10   Tuesday
13 2021-01-13           5 Wednesday
14 2021-01-14           9  Thursday
15 2021-01-15           2    Friday
16 2021-01-16           8  Saturday
17 2021-01-17           5    Sunday
18 2021-01-18           6    Monday
19 2021-01-19           8   Tuesday
20 2021-01-20           3 Wednesday

或者我们可以使用lubridate 包。我们应该设置wday函数的label参数,它相当于base::weekdaysTRUE,否则返回从星期日开始的工作日数:

library(lubridate)

a %>%
  mutate(date = dmy(date), 
         weekday = wday(date, label = TRUE))

【讨论】:

【参考方案2】:

使用base R

within(a, date <- as.Date(date, "%d.%m.%Y"); weekday <- weekdays(date))
         date sales_count   weekday
1  2021-01-01          10    Friday
2  2021-01-02           4  Saturday
3  2021-01-03           8    Sunday
4  2021-01-04           6    Monday
5  2021-01-05           4   Tuesday
6  2021-01-06           4 Wednesday
7  2021-01-07           4  Thursday
8  2021-01-08           3    Friday
9  2021-01-09           1  Saturday
10 2021-01-10           5    Sunday
11 2021-01-11           2    Monday
12 2021-01-12          10   Tuesday
13 2021-01-13           5 Wednesday
14 2021-01-14           9  Thursday
15 2021-01-15           2    Friday
16 2021-01-16           8  Saturday
17 2021-01-17           5    Sunday
18 2021-01-18           6    Monday
19 2021-01-19           8   Tuesday
20 2021-01-20           3 Wednesday

【讨论】:

以上是关于无法在 R 中设置天数和日期名称(日期始终为字符)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 angular.js 中设置日期?

无法在 android 的 AlramManager 中设置指定日期

无法在警报管理器中设置日历日期

如何使用 Formik 在 react-datepicker 中设置初始日期?

如何在 Yaml 日期字符串中设置时区?

如何在android中设置移动系统时间和日期?