2つの列の値に従って、大きなデータフレームをデータフレームのリストに分割したい。次に、結果のリストのすべてのデータフレーム(ラグ変換)に共通のデータ変換を適用します。 splitコマンドを知っていますが、一度に1列のデータでしか機能しません。
分割したいすべての要素をリストに入れる必要があります。例:
split(mtcars,list(mtcars$cyl,mtcars$gear))
次に、これにlapply
を使用して、他にやりたいことを行うことができます。
結果に行データフレームがゼロにならないようにする場合は、drop
パラメータがあり、そのデフォルトは「[」関数のdropパラメータの反対です。
split(mtcars,list(mtcars$cyl,mtcars$gear), drop=TRUE)
これはどう:
_ library(plyr)
ddply(df, .(category1, category2), summarize, value1 = lag(value1), value2=lag(value2))
_
plyr
パッケージとddply()
関数の優れた仕事のようです。未解決の質問がある場合は、サンプルデータを提供してください。分割はいくつかの列でも機能するはずです:
_df<- data.frame(value=rnorm(100), class1=factor(rep(c('a','b'), each=50)), class2=factor(rep(c('1','2'), 50)))
g <- c(factor(df$class1), factor(df$class2))
split(df$value, g)
_