Причина использования странного имени столбца при использовании Delt
заключается в том, что он возвращает матрицу, а не вектор. Принуждение к этому as.vector
решает эту тайну.
Однако я подозреваю, что вы делаете это слишком сложным. Есть ли причина, по которой вы не можете просто отсортировать фрейм данных по годам, а затем применить diff
и Delt
к каждому столбцу, соответствующим образом переименовать столбцы, а затем cbind
их вместе?
Некоторый стартовый код:
longley.o <- arrange(longley,Year)
apply(longley.o,2,function(x){c(NA,diff(x))})
apply(longley.o,2,Delt)
Более полная версия (без ручного ввода столбцов):
longley.o <- arrange(longley,Year)
valdiff <- apply(longley.o,2,function(x){c(NA,diff(x))})
valdelt <- apply(longley.o,2,Delt)
colnames(valdiff) <- paste("valdiff",colnames(valdiff),sep = ".")
colnames(valdelt) <- paste("valdelt",colnames(valdelt),sep = ".")
out <- cbind(longley.o,
valdiff[,-match("Year",colnames(longley.o))],
valdelt[,-match("Year",colnames(longley.o))])