2015-10-08 8 views
-1

У меня возникли проблемы с преобразованием столбца данных .csv с будними днями в число (так что 1 = понедельник, 2 = вторник, 3 = среда и т. Д.). Я пытаюсь использовать strptime функцию, как показано здесь: http://www.inside-r.org/r-doc/base/strftimeПреобразование дня недели в номер в R

Так как я хочу, чтобы преобразовать будний день к ряду, я использовал «% U» форматирование вариант. Вот мой код ниже:

> newweekdaynum <- strptime(SFCrimeData$DayOfWeek, "%u") 

где SFCrimeData является набор данных, у меня есть, что имеет кучу информации о преступлениях. Никаких ошибок не возникает после запуска оператора, но когда я хочу напечатать «newweekdaynum», все, что приходит, это огромная таблица значений, в которой все говорят «NA».

Что я делаю неправильно?

+3

Если у вас есть 'v1 <- c ('Monday', 'Tuesday', .... 'Sunday'); factor (v1, levels = c ('Monday' ,, .., 'Sunday'), labels = 1: 7) 'или использовать'? match' – akrun

+0

Пожалуйста, 'dput (SFCrimeData $ DayOfWeek)' и добавьте вывод в свой после. –

+0

@Pascal, файл SFCrimeData имеет около 800k строк, поэтому я не могу полностью вставить полный вывод здесь, но я запустил команду, и в основном все это число от 1 до 10 с «L» сразу после него. –

ответ

5

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 

(Вы бы на самом деле не нужно, чтобы сделать это упорядоченный фактор, фактор с уровнями, указанными в правильном порядке, было бы достаточно, но в будние дни являются концептуально упорядоченным фактором.)

Смежные вопросы