Преобразование дня недели в число в R
У меня проблемы с преобразованием столбца.csv данных с днями недели в число (так что 1 = понедельник, 2 = вторник, 3 = среда и т. Д.). Я пытаюсь использовать функцию strptime, как показано здесь: http://www.inside-r.org/r-doc/base/strftime
Поскольку я хочу преобразовать день недели в число, я использовал опцию форматирования "%u". Вот мой код ниже:
> newweekdaynum <- strptime(SFCrimeData$DayOfWeek, "%u")
где SFCrimeData - это набор данных, который у меня есть, с кучей криминальной информации. После запуска оператора не возникает никаких ошибок, но когда я хочу напечатать "newweekdaynum", все, что приходит, - это огромная таблица значений, которая все говорит "NA".
Что я делаю неправильно?
1 ответ
strptime
может использоваться, если у вас есть что-то, что может быть преобразовано в полную дату / дату / время. Он вернет объект datetime. Это не то, что вы хотите.
Вместо этого вы можете использовать упорядоченные факторы:
#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().