Преобразование нескольких векторов символов на сегодняшний день с применением возвращает число в R - PullRequest
0 голосов
/ 29 июня 2018

У меня есть df с 4 столбцами даты в качестве символьных векторов:

print(df)
       Date1      Date2      Date3      Date4
1 2016-12-05       <NA> 2016-11-24 2017-12-05
2 2007-10-15 2009-09-18 2007-10-15 2017-10-15
3 2005-07-22 2009-06-20 2005-07-22 2017-07-22
4 2008-01-03 2017-07-25 2008-01-03 2018-01-03

Если я подам заявление:

df <- apply(df, 2, function(x) as.Date(x, origin = "1970-01-01")) 

В результате получаю:

print(df)
     Date1 Date2 Date3 Date4
[1,] 17140    NA 17129 17505
[2,] 13801 14505 13801 17454
[3,] 12986 14415 12986 17369
[4,] 13881 17372 13881 17534

Я решил проблему, используя lapply вместо apply, но я хотел бы знать, что происходит внутри apply для возврата дат в виде числа.

1 Ответ

0 голосов
/ 04 июля 2018

ОП хотел бы знать, что происходит внутри, подать заявку на возврат дат в виде числа .

Страница справки ?apply говорит

Во всех случаях результат приводится as.vector к одному из базовых векторных типов перед установкой размеров

Страница справки ?as.vector говорит

Все атрибуты удаляются из результата, если он в атомарном режиме, но не для результата списка.

Как уже упоминалось Akarsh Jain , объекты Date имеют атрибут class. Удаление атрибута class оставит обычное количество дней с 1970-01-01.

Вот фрагмент кода для демонстрации:

x <- as.Date("2016-12-05")
x
#> [1] "2016-12-05"
attributes(x)
#> $class
#> [1] "Date"
y <- as.vector(x)
y
#> [1] 17140
attributes(y)
#> NULL
...