Формат даты Smartbind и ошибка в R

#r #date #append

#r #Дата #добавить

Вопрос:

Я получаю сообщение об ошибке при использовании smartbind для добавления двух наборов данных. Во-первых, я почти уверен, что ошибка, которую я получаю:

 > Error in as.vector(x, mode) : invalid 'mode' argument
 

исходит из переменной date в обоих наборах данных. Переменная даты в ее необработанном формате такая: месяц / день / год. Я преобразовал переменную после импорта данных с помощью as.Дата и формат

 > rs.month$xdeeddt <- as.Date(rs.month$xdeeddt, "%m/%d/%Y")
> rs.month$deed.year <-  as.numeric(format(rs.month$xdeeddt, format = "%Y"))
> rs.month$deed.day <-  as.numeric(format(rs.month$xdeeddt, format = "%d"))
> rs.month$deed.month <-  as.numeric(format(rs.month$xdeeddt, format = "%m"))
 

Результирующая переменная даты как таковая:

 > [1] "2014-03-01" "2014-03-13" "2014-01-09" "2013-10-09"
 

Преобразование для даты было применено к обоим наборам данных (формат необработанных данных был идентичен для обоих наборов данных). Когда я пытаюсь использовать smartbind из пакета gtools для добавления двух наборов данных, он возвращает приведенную выше ошибку. Я удалил переменные даты, месяца, дня и года из обоих наборов данных и смог успешно добавить наборы данных с помощью smartbind.

Любые предложения о том, как я могу добавить наборы данных с переменными даты …..?

Комментарии:

1. Какую версию gtools вы используете? Я вижу, чтобы увидеть эту ошибку, gtools_3.1.1 но не gtools_3.4.1

2. У меня версия 3.0.0, я обновлю и попробую.

Ответ №1:

Я пришел сюда после поиска в Google того же сообщения об ошибке во время smartbind двух фреймов данных. Приведенное выше обсуждение, хотя и не столь убедительное в отношении решения, определенно помогло мне преодолеть эту ошибку.

Оба моих фрейма данных содержат объекты даты POSIXct. Это всего лишь числовой вектор UNIXy seconds-since-epoch, а также пара атрибутов, которые обеспечивают структуру, необходимую для интерпретации вектора как объекта даты. Решение состоит в том, чтобы просто удалить атрибуты из этой переменной, выполнить smartbind, а затем восстановить атрибуты:

 these.atts <- attributes(df1$date)
attributes(df1$date) <- NULL
attributes(df2$date) <- NULL
df1 <- smartbind(df1,df2)
attributes(df1$date) <- these.atts
 

Я надеюсь, что это когда-нибудь кому-нибудь поможет.

-Энди