Создание функции для преобразования разложенного графа в фрейм данных - PullRequest
0 голосов
/ 04 марта 2020

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

dat <- with(decomposed,data.frame(Observed = x, Trend = trend, Seasonal = seasonal, Random = random)) 
dat$Date <- seq(as.Date("yyyy-mm-dd"), as.Date("yyyy-mm-dd"), by = "week")
colnames(dat)[1] <- "Observed"
colnames(dat)[4] <- "Random"

Поскольку мне приходилось делать это много раз, я думал о написании функции. Я хочу, чтобы в функции можно было выбирать как даты, так и объект. Это то, что я пытался до сих пор без какого-либо успеха.

decomposed_table <- function(x, start.date, end.date){
xx <- with(x,data.frame(Observed = x, Trend = trend, Seasonal = seasonal, Random = random))
xx$Date <- seq(as.Date("yyyy-mm-dd"), as.Date("yyyy-mm-dd"), by = "week")
colnames(xx)[1] <- "Observed"
colnames(xx)[4] <- "Random"
}

Любая помощь будет принята с благодарностью, так как я застрял.

1 Ответ

0 голосов
/ 04 марта 2020

Вот что я сделал, я столкнулся с некоторыми проблемами, чтобы заставить ваш код работать с примером, который вы мне играете в своем комментарии. Поэтому не стесняйтесь комментировать, чтобы я мог его улучшить.

# data from your comment
    t <- ts(co2, frequency=12) 
    decomposed <- decompose(t)

# here starts the modifications you want to make to many decomposed-like objects
    dat <- with(decomposed,data.frame(Observed = x, Trend = trend, Seasonal = seasonal, Random = random)) 
    dat$Date <- seq(as.Date("yyyy-mm-dd"), as.Date("yyyy-mm-dd"), by = "week") # this lines creates an error
    colnames(dat)[1] <- "Observed" # I do not understand this line as you have already renamed you column inside the "with()" function
    colnames(dat)[4] <- "Random" # idem

Итак, я понимаю, что у вас есть много разложенных списков, и вы хотите применить к ним некоторые преобразования. Что бы я сделал, чтобы поместить все эти разложенные объекты в один список и использовать lapply(), чтобы использовать функцию, которую вы определили для каждого из них. В целях примера я упростил вашу функцию.

t <- ts(co2, frequency=12) 
decomposed <- decompose(t)
# create your function
function_ex = function(x) {
  xx =  with(decomposed,
             data.frame(Observed = x, 
                        Trend = trend, 
                        Seasonal = seasonal, 
                        Random = random))
}

# create a list of decomposed-like objects 
example = list(a = decomposed, b = decomposed)

# and apply the function on them
output = lapply(example, FUN = function_ex) # output is also a list but you can do whatever you want with it such as extract all tables in your environment, etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...