2016-07-08 3 views
0

Я пытаюсь использовать sapply, чтобы получить максимальную дату в столбце, но он возвращает число вместо даты. Любая идея, как это решить? Я не могу показаться, чтобы выяснить, почему это происходит ..Макс. Число в столбце R с sapply

mtcars$datecolm = '2015-03-03' 
mtcars$datecolm[1] = '2015-09-09' 
    mtcars$datecolm = as.Date(mtcars$datecolm) 

    sapply(mtcars, max) # why is it returning a number instead of a date?? 
    max(mtcars$datecolm) # works correctly 

Пожалуйста, используйте sapply учитывая то, как я установить это ... Я знаю, что это работает с (применяются mtcars, 2, максимум).

+0

для преобразования числовой формы даты в форму, пригодную для чтения, просто преобразуйте данные столбца даты. например 'as.Date (16687, origin =" 1970-01-01 ")' –

ответ

2

Мы должны использовать lapply вместо sapply

lapply(mtcars, max) 

как sapply возвращает vector из аргументе simplify=TRUE по умолчанию и vector может содержать только один класс. Поскольку есть числовые столбцы, столбец «Дата» (который хранится как целое число) привязывается к значению integer. Тем не менее, мы можем использовать sapply, если мы используем simplify = FALSE для возврата list.

sapply(mtcars, max, simplify = FALSE) 

Что касается использования apply

apply(mtcars,2,max) 

Я бы не рекомендовал использовать apply как это будет преобразовать в матрицу и матрицу может содержать только один класс. Здесь будет весь вывод character, поскольку класс «Дата» был преобразован в character.


Что касается проблемы, упомянутой ОП в комментариях, когда мы имеем вывод, что принадлежит к другому классу, можно либо использовать list или data.frame (как data.frame является list), как c т.е. конкатенации возвращает vector и как упомянутый выше, он может содержать только один класс.

do.call(rbind, lapply(mtcars, function(x) 
      data.frame(Class=class(x), Max=max(x, na.rm=TRUE)))) 
+0

Я попытался использовать что-то вроде этого, и он не работает - --- as.data.frame (lapply (mtcars, function (x) c (class (x), max (x, na.rm = TRUE)))) – runningbirds

+0

@runningbirds Я обновил сообщение с указанной вами проблемой – akrun

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