as.Date выдает несоответствие номера строки, но все векторы имеют одинаковую длину

Следующий набор данных (CSV) содержит 3133 строк расходов по дням с 01.07.2000 по 31.12.2014:

head(d_exp_0014)
2000    7   6   792078.595  9
2000    7   7   140065.5    9
2000    7   11  190553.2    9
2000    7   12  119208.65   9
2000    7   16  1068156.293 9
2000    7   17  0           9
2000    7   21  457828.8033 9
2000    7   26  661445.0775 9
2000    7   28  211122.82   9
2000    8   2   273575.1733 8

Столбцы здесь - Год, Месяц, День, Расходы и Счетчик (сколько дней в каждом месяце были расходы).

Я пытаюсь сделать прогноз до конца 2015 года, и мне нужно иметь дело с этими беспорядочными столбцами даты, чтобы я мог нарезать и нарезать объекты xts (?) С помощью dplyr. Функции ISOdate и as.Date выдают эту ошибку:

> exp <- data.frame(data = d_exp_0014, Date = as.Date(paste(Year, Month, Day), format = "m%/d%/Y%"), Amount = Amount, Count = Count, t = c(1:3133))
Error in data.frame(data = d_exp_0014, Date = as.Date(paste(Year, Month,  : 
  arguments imply differing number of rows: 3133, 3134
> length(d_exp_0014$Year)
[1] 3133
> length(d_exp_0014$Month)
[1] 3133
> length(d_exp_0014$Day)
[1] 3133

Что я делаю неправильно? И должен ли я вместо этого построить вектор из 5296 непрерывных дат между 01.07.2000 и 31.12.2014 и объединить мои 3133 строки наблюдений с этой таблицей (таким образом, эффективно вставив '0' в столбец Сумма для дней, в которые были нет платежей)?


person d8aninja    schedule 17.02.2015    source источник
comment
data.frame не принимает аргумент data. Возможно, тебе стоит использовать exp = with(d_exp_0014, data.frame(Date = ...)).   -  person Gregor Thomas    schedule 17.02.2015
comment
Нужен sep = / in paste(Year, Month, Day), если вы собираетесь использовать этот формат.   -  person IRTFM    schedule 18.02.2015


Ответы (1)


Несколько ошибок (но не от paste): Полагаю, вас научили использовать attach. Вероятно, это источник данной ошибки. Начать с

detach(d_exp_0014)
d_exp_0014 <- cbind(d_exp_0014, 
                    myDate = with(d_exp_0014,
                                as.Date(paste(Year, Month, Day, sep="/"), 
                                     format = "%Y/%m/%d") # note % first then letter
                                  )
                    )

Затем вы можете добавить дополнительные столбцы по мере необходимости.

person IRTFM    schedule 17.02.2015
comment
Он возвращает столбец в data.frame с именем myDate, заполненный значениями NA. - person d8aninja; 18.02.2015
comment
Использование myDate <- as.Date(paste(d$Month,d$Day,d$Year,sep="/"), format="%m/%d/%Y") для привязки к d_exp_0014 data.frame. Я предполагаю, что вставка должна быть в том же порядке, что и параметр форматирования? - person d8aninja; 18.02.2015
comment
Я не заметил, что порядок аргументов вставки не соответствует формату. Необходимо изменить формат на% Y /% m /% d - person IRTFM; 18.02.2015