Функция sapply as.Date для изменения переменной времени с целого на дату не работает
У меня вопрос, у меня есть три столбца целых чисел, представляющих даты. Если я использую
as.Date(x,origin="1970-01-01")
для каждого отдельного столбца это работает. Однако, если я использую sapply
как
sapply(data,function(x)as.Date(x,origin="1970-01-01"))
это не работает. Любые идеи о том, как решить проблему эффективно? Воспроизводимые коды приведены ниже
data=data.frame(time1=c(10189,11655,10914,12013,10934),time2=c(11758,10696,9784,10725,11225))
sapply(data,function(x)as.Date(x,origin="1970-01-01"))
Результат не меняется вообще. но использовать
as.Date(data$time1,origin="1970-01-01")
это может работать.
2 ответа
Решение
Использование lapply
:
> lapply(data,function(x) as.Date(x,origin="1970-01-01"))
$time1
[1] "1997-11-24" "2001-11-29" "1999-11-19" "2002-11-22" "1999-12-09"
$time2
[1] "2002-03-12" "1999-04-15" "1996-10-15" "1999-05-14" "2000-09-25"
И если вы хотите вывод в качестве фрейма данных, вы можете использовать as.data.frame()
:
> as.data.frame(lapply(data,function(x) as.Date(x,origin="1970-01-01")))
time1 time2
1 1997-11-24 2002-03-12
2 2001-11-29 1999-04-15
3 1999-11-19 1996-10-15
4 2002-11-22 1999-05-14
5 1999-12-09 2000-09-25
Вам не нужно заключать дополнительный аргумент в функцию. lapply(...)
также принимает дополнительные аргументы FUN. Следовательно...
as.data.frame(lapply(data, as.Date, origin = "1970-01-01"))
... будет работать так же.