2017-06-06 1 views
1

いくつかのデータにわたって、グループ化変数によって一連の異なるフィルタを実行しようとしています。一例として、このコードはグループ化変数(歯車)全体に1つのフィルタ(0.1)を生成するように動作します。R:ddplyを使ってstats :: filterをループする

library(plyr) 
library(BBmisc) 
mtcars <- mtcars[order(mtcars$gear),] 
mtcars2 <- ddply(mtcars,.(gear),transform,mpgfilter = as.numeric(stats::filter(mpg, filter=0.1, method="recursive"))) 

しかし、私は複数のフィルタをフィードすることができます。私はラップ関数内でコードを入れ子にすることを考えていました。例として、ここでは(リストなど)様々なフィルターは、

newdata <- as.data.frame(seq(from = 0.1, to = 0.9, by = 0.1)) 
newdata <- as.data.frame(t(newdata)) 
colnames(newdata) = newdata[1, ] 
colnames(newdata) <- paste("V", colnames(newdata), sep = "_") 
newlist <- convertColsToList(newdata) 

そして、ここでは、私は(動作しない)ソリューションを考えていたものです。

newlist3 <- lapply(newlist, function(y){ 
    mtcars2 <- ddply(mtcars,.(gear), transform, mpgfilter = as.numeric(stats::filter(mpg, filter=y, method="recursive"))) 
}) 

任意の提案?私の最終的な出力は、各列が異なるフィルタからの出力を示すデータフレームとなります。答えは、より良い方法があればlapply/ddplyを使う必要はありません。

ありがとうございました。

答えて

1

は、私が使用して、私はロータリーのファッションに自分の質問に答えたと思うの代わりddplyの関数「は」:実行可能なデータフレームに戻ってそれを得るために必要な余分な作業と

new <- lapply(newlist, function(y){ 
by(mtcars, mtcars$gear, function(x) mpgfilter = as.numeric(stats::filter(x$mpg, filter=y, method="recursive")))}) 

new2 <- lapply(new, function(y){ 
    resultsdf <- as.data.frame(t(do.call(rbind,y)))}) 
df <- as.data.frame(ldply(new2, data.frame)) 
df2 <- melt(df) 
df2 <- ddply(df2,".id",transform,ID=1:length(.id)) 
finaldata <- dcast(df2, ID + variable ~ .id, value.var = "value") 

少し厄介しかし、トリックを行います。

関連する問題