应用某些函数后,获得原始源的X倍的data.frame(或list)
我对这个问题已经有一段时间了 我想要的是,将一个函数应用于一个被因子分割的data.frame。此数据框有n>2列值,我需要用于此函数 在本例中,该数据集有一列5个因素(应用某些函数后,获得原始源的X倍的data.frame(或list),r,functional-programming,apply,R,Functional Programming,Apply,我对这个问题已经有一段时间了 我想要的是,将一个函数应用于一个被因子分割的data.frame。此数据框有n>2列值,我需要用于此函数 在本例中,该数据集有一列5个因素(a,b,c,d,e),以及两列值(values1,values2)。我想应用一些函数来考虑每一列值(auto.arimafirst和forecast.arima,在本例中)。要播放的数据集如下所示: library(forecast) set.seed(2) dat <- data.frame(factors = lett
a
,b
,c
,d
,e
),以及两列值(values1
,values2
)。我想应用一些函数来考虑每一列值(auto.arima
first和forecast.arima
,在本例中)。要播放的数据集如下所示:
library(forecast)
set.seed(2)
dat <- data.frame(factors = letters[1:5],values1 = rnorm(50), values2 =rnorm(50))
然后使用rappy
:
rapply(dat,function(x) forecas.Arima(auto.arima(x)),dat$factors)
lapply(split(dat,dat$factors), function(x) forecast.Arima(auto.arima(x)))
或lappy
:
rapply(dat,function(x) forecas.Arima(auto.arima(x)),dat$factors)
lapply(split(dat,dat$factors), function(x) forecast.Arima(auto.arima(x)))
和其他一些组合,都没有用
我认为最简单的解决方案应该是apply系列中的一个函数,但任何解决方案都是有效的。这就是您想要的吗
m = melt(dat, id.vars = "factors")
l = split(m, paste(m$factors, m$variable))
lapply(l, function(x) forecast.Arima(auto.arima(x$value)))
i、 e.将数据分为10个不同的帧,然后对
值应用预测?应用解决方案的问题是,您将整个数据帧传递给auto.arima
函数,该函数采用向量,因此您需要类似以下内容:
lapply(split(dat,dat$factors), function(df) {
apply(df[,-1], 2, function(col) forecast.Arima(auto.arima(col)))
})
这会像以前一样在因子上拆分数据帧,然后将auto.arima
函数包装在forecast.arima
中,应用于每一列(忽略第一列是因子)。这将返回列表列表(5个因子乘以2个值),因此允许您将values1
和values2
分开
您可以使用unlist(x,recursive=FALSE)
将其展平为10个列表。我不完全确定这是否是您的要求,但您可以将数据.frame
与“factors”
作为id.vars
,拆分为“factors”
和变量
列,您将从melt
中获得,然后lappy
您在结果列表中的函数。顺便问一下,您想应用auto.arima
的单变量时间序列是什么?我不清楚。@ColonelBeauvel在这个例子中,我想对每个因子的值1和值2应用auto.arima,你想对值1和值2的10个值应用因子'a'auto.arima吗?@ColonelBeauvel是的,完全正确,对b、c、d和e的过程相同。我会使用plyr作为替代:ldply(unique(m[,c('factors'、'variable')))、函数(x)…
但是+1谢谢你提供额外的答案。但是,当我尝试按原样使用它们时,第一个会抛出一个错误,而第二个会预测每一点-1,并且它也只给出5个预测,而不是10个(每个因子2个)。