Имам списък от 993 елемента, като всеки елемент се състои от седем променливи с различен брой наблюдения. Този списък е създаден чрез разделяне на рамка с данни.
Трябва да приложа функцията diff() към една от променливите в елементите. Въпреки това, когато се опитам, R ми дава следната грешка:
Грешка в
[[<-.data.frame
(*tmp*
, "DiffINT", стойност = c(1.02, 0, 0, 0, : замяната има 30 реда, данните имат 34
Следното е цикълът, който използвам.
for (i in 1:993){
ONT.list[[i]][["DiffINT"]] <- diff(ONT.list[[i]][["INTprice"]], lag = 4)
}
Променливата DiffINT съдържа толкова редове, колкото останалите променливи в елемента, и в момента е запълнена с NA. Моята цел е да оставя първите 4 NA там, тъй като данните трябва да са със закъснение.
Всякакви предложения за това как да заобиколите тази грешка или да манипулирате елементите в списъка по-ефективно са добре дошли. Благодаря предварително!
РЕДАКТИРАНЕ: Благодаря на коментаторите за тяхната помощ, добавянето на 4 NA проработи! Но при продължаването на цикъла възникна нов проблем: когато дължината на реда е по-малка от 4.
Грешка в
[[<-.data.frame
(*tmp*
, "DiffINT", стойност = c(NA_real_, NA_real_, : замяната има 4 реда, данните имат 2
Предложения?
РЕДАКТИРАНЕ 2:
Схванах го. Добавен оператор if.
for (i in 1:993) {
if (length(ONT.list[[i]][["INTprice"]]) >= 4)
ONT.list[[i]][["DiffINT"]] <- c(rep(NA,4),diff(ONT.list[[i]]
[["INTprice"]], lag = 4))
}
Благодаря отново на всички.
diff(1:3)
? - person IceCreamToucan   schedule 15.06.2018diff(1:5, lag = 4)
? - person Rui Barradas   schedule 15.06.2018ONT.list[[i]][["DiffINT"]] <- c(rep(NA,4),diff(ONT.list[[i]][["INTprice"]], lag = 4)
- person MKR   schedule 15.06.2018diff
връща по-къс вектор). Така че вероятно ще трябва да подпълните замяната сNA
s (вижте предложението на @MKR) - person zack   schedule 15.06.2018