Преобразование дня недели в число в 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().

Другие вопросы по тегам