У меня есть кадр данных (тест), который выглядит следующим образом:Преобразование даты с различными форматами в кадре данных по нескольким столбцам
abx start stop abx2 start2 stop2 abx3 start3 stop3
cipro 07/10/12 07/10/12 flagyl 07/10/12 07/17/12 n/a n/a n/a
vanco 07/12/2012 07/15/2012 levo 07/20/2012 07/27/2012 n/a n/a n/a
Это продолжается до start9/stop9. Я хотел бы преобразовать все даты в стандартный формат даты.
Я написал функцию для преобразования дат начала в зависимости от количества символов в дате. Планируйте написать аналогичную функцию для остановок.
dateconv <- function(x) {
as.character(x)
z <- ifelse(nchar(x) == 8, "y","Y")
date <- as.Date(x, format =paste0("%m/%d/%", z))
rm(z)
}
test[,grep("^start", names(test))] <- dateconv(test[,grep("^start",
names(test))])
Любые идеи, что я делаю неправильно? Получение этой ошибки: Ошибка в as.Date.default (x, format = paste0 ("% m /% d /%", z)): не знаю, как преобразовать 'x' в класс "Date"
Update (20 февраля 2015): Благодаря комментарий Ричарда я получил эту работу (на самом деле, как Grep ("улица (статья | оп)":
g <- grep("st(art|op)", names(test), value = TRUE)
test[g] <- lapply(test[g], function(x) {
x <- as.character(x)
as.Date(x, format = paste0("%m/%d/%", ifelse(nchar(x) == 8, "y", "Y")))})
последней строки в функции г является его возвращаемым значением. вы должны переместить 'rm (z)' где-то еще или просто удалить его вообще, так как это не нужно. И вы неправильно вызываете 'dateconv' для ввода. Вы должны использовать 'lapply' или подобное, например' lapply (test [, grep ("^ start", names (test))], dateconv) ' – rawr
Возможный дубликат [Как изменить несколько форматов даты в одном столбце] (http : //stackoverflow.com/questions/13764514/how-to-change-multiple-date-formats-in-same-column) – Metrics