web-dev-qa-db-ja.com

2列のデータを使用してデータフレームを分割し、結果のデータフレームのリストに共通の変換を適用する

2つの列の値に従って、大きなデータフレームをデータフレームのリストに分割したい。次に、結果のリストのすべてのデータフレーム(ラグ変換)に共通のデータ変換を適用します。 splitコマンドを知っていますが、一度に1列のデータでしか機能しません。

35
user1160760

分割したいすべての要素をリストに入れる必要があります。例:

split(mtcars,list(mtcars$cyl,mtcars$gear))

次に、これにlapplyを使用して、他にやりたいことを行うことができます。

結果に行データフレームがゼロにならないようにする場合は、dropパラメータがあり、そのデフォルトは「[」関数のdropパラメータの反対です。

split(mtcars,list(mtcars$cyl,mtcars$gear), drop=TRUE)
59
James

これはどう:

_ 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)
_
7
Seb