2014-10-05 7 views
1

Мой вопрос: у меня есть три столбца целых чисел, представляющих даты. Если я использую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") 

он может работать.

ответ

1

Использование 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 
+1

Thx! но почему 'sapply' не будет работать здесь ... Я никогда не использовал' lapply' на dataframe ... – MYjx

1

Вам не нужно обернуть дополнительный аргумент в функцию. lapply(...) также принимает дополнительные аргументы FUN. Следовательно ...

as.data.frame(lapply(data, as.Date, origin = "1970-01-01")) 

... будет работать.