【问题标题】:R: Weekday recognized as character : how to convert it to a numerical valueR:工作日识别为字符:如何将其转换为数值
【发布时间】:2017-09-30 02:50:41
【问题描述】:

我是 R 新手,我正在尝试构建一个直方图,显示一周中每一天的数据点频率(因此周一、周二等数据的频率)。由于原始数据集包含 YYYY-MM-DD HH:MM:SS 形式的日期和时间信息,我最初使用脚本将日期转换为星期几的数值:

Weekday <- format(as.POSIXct(strptime(df$DateAndTime, "%Y-%m-%d %H:%M:%S", 
tz="")),format = "%w"))
Data$Weekday <- Weekday

我在尝试创建直方图时收到以下消息:

hist(Data$Weekday)
Error in hist.default(Data$Weekday) : 'x' must be numeric

在数据文件中,Weekday 的数据是数字(0-6,其中 0 是星期日),从摘要中类和模式都是字符。如何将 R 识别为字符的数字数据点(代表工作日)更改为数字?

谢谢!

【问题讨论】:

  • 您应该向reproducible example 提供示例输入数据,以便我们可以运行和测试您的代码。您提到工作日已经有一个编码为 0-6 的列?你为什么要创建一个新的?
  • as.numeric(Data$Weekday)
  • barplot(table(Data$Weekday))

标签: r character numerical weekday


【解决方案1】:

我真的很喜欢在处理工作日时使用 lubridate 包。您可以直接使用 wday() 函数从 YYYY-MM-DD HH:MM:SS 格式转到工作日,它与 ggplot2 配合得非常好。

library(readr)
library(lubridate)
library(ggplot2)

example_data <- read_csv("datetime\n
                         2016-12-03 00:01:00\n
                         2016-12-03 00:02:00\n
                         2016-12-04 00:03:00\n
                         2016-12-04 00:04:00\n
                         2016-12-05 00:05:00\n
                         2016-12-06 00:04:00\n
                         2016-12-07 00:05:00\n
                         2016-12-08 00:04:00\n
                         2016-12-09 00:04:00\n
                         2016-12-11 00:05:00\n
                         2016-12-12 00:06:00\n
                         2016-12-13 00:07:00\n
                         2016-12-13 00:08:00\n
                         2016-12-14 00:09:00\n
                         2016-12-14 00:10:00")

ggplot(example_data, aes(wday(datetime, label = TRUE))) +
    geom_histogram(stat = "count") +
    labs(x = NULL)

【讨论】:

  • 谢谢,这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2010-11-26
  • 2021-04-02
  • 2019-06-22
相关资源
最近更新 更多