将星期几转换为R中的数字
Converting day of week to number in R
我在将包含工作日的 .csv 数据列转换为数字时遇到问题(因此 1 = 星期一,2 = 星期二,3 = 星期三,等等)。我正在尝试使用 strptime 功能,如下所示:http://www.inside-r.org/r-doc/base/strftime
因为我想将工作日转换为数字,所以我使用了“%u”格式化选项。下面是我的代码:
> newweekdaynum <- strptime(SFCrimeData$DayOfWeek, "%u")
其中 SFCrimeData 是我拥有的包含大量犯罪信息的数据集。在我 运行 语句之后没有错误出现,但是当我想打印 "newweekdaynum" 时,所有出现的都是一个巨大的 table 值,它们都说 "NA"。
我做错了什么?
strptime
如果你有东西可以解析成全date/datetime可以用。它将 return 一个日期时间对象。这不是你想要的。
相反,您可以使用有序因子:
#some example data
set.seed(42)
x <- factor(sample(c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"),
20, TRUE))
# [1] Sunday Sunday Wednesday Saturday Friday Thursday Saturday Monday Friday Friday Thursday Saturday Sunday
#[14] Tuesday Thursday Sunday Sunday Monday Thursday Thursday
#Levels: Friday Monday Saturday Sunday Thursday Tuesday Wednesday
#turn into ordered factor
x <- factor(x, levels = c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"),
ordered = TRUE)
#[1] Sunday Sunday Wednesday Saturday Friday Thursday Saturday Monday Friday Friday Thursday Saturday Sunday
#[14] Tuesday Thursday Sunday Sunday Monday Thursday Thursday
#Levels: Monday < Tuesday < Wednesday < Thursday < Friday < Saturday < Sunday
#extract underlying integer values
as.integer(x)
#[1] 7 7 3 6 5 4 6 1 5 5 4 6 7 2 4 7 7 1 4 4
(您实际上不需要将其设为有序因子,以正确顺序指定级别的因子就足够了,但工作日在概念上是有序因子。)
df$Date <- as.Date(df$Date)
df$wkdaynum <- format(df$Date,"%u")
df$wkdaynum <- as.numeric(df$wkdaynum)
所以,你的错误是使用 strptime() 而不是 format()。
我在将包含工作日的 .csv 数据列转换为数字时遇到问题(因此 1 = 星期一,2 = 星期二,3 = 星期三,等等)。我正在尝试使用 strptime 功能,如下所示:http://www.inside-r.org/r-doc/base/strftime
因为我想将工作日转换为数字,所以我使用了“%u”格式化选项。下面是我的代码:
> newweekdaynum <- strptime(SFCrimeData$DayOfWeek, "%u")
其中 SFCrimeData 是我拥有的包含大量犯罪信息的数据集。在我 运行 语句之后没有错误出现,但是当我想打印 "newweekdaynum" 时,所有出现的都是一个巨大的 table 值,它们都说 "NA"。
我做错了什么?
strptime
如果你有东西可以解析成全date/datetime可以用。它将 return 一个日期时间对象。这不是你想要的。
相反,您可以使用有序因子:
#some example data
set.seed(42)
x <- factor(sample(c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"),
20, TRUE))
# [1] Sunday Sunday Wednesday Saturday Friday Thursday Saturday Monday Friday Friday Thursday Saturday Sunday
#[14] Tuesday Thursday Sunday Sunday Monday Thursday Thursday
#Levels: Friday Monday Saturday Sunday Thursday Tuesday Wednesday
#turn into ordered factor
x <- factor(x, levels = c("Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"),
ordered = TRUE)
#[1] Sunday Sunday Wednesday Saturday Friday Thursday Saturday Monday Friday Friday Thursday Saturday Sunday
#[14] Tuesday Thursday Sunday Sunday Monday Thursday Thursday
#Levels: Monday < Tuesday < Wednesday < Thursday < Friday < Saturday < Sunday
#extract underlying integer values
as.integer(x)
#[1] 7 7 3 6 5 4 6 1 5 5 4 6 7 2 4 7 7 1 4 4
(您实际上不需要将其设为有序因子,以正确顺序指定级别的因子就足够了,但工作日在概念上是有序因子。)
df$Date <- as.Date(df$Date)
df$wkdaynum <- format(df$Date,"%u")
df$wkdaynum <- as.numeric(df$wkdaynum)
所以,你的错误是使用 strptime() 而不是 format()。