2017-09-29 18 views
0

に追加一つから取り除か単一の値を持つ列に私はこのセレクト開始と終了

col1 = rnorm(1:100) 
col2 = c(1:100) 
col3 = c(501:600) 
df <- data.frame(col1, col2, col3) 

ようなデータフレームを持っている私はCOL1 30の第一の値を選択する(すなわち、行1 〜30)、単純な計算を行い、次に にcol1(つまり2〜31行)の30個の値を選択し、これを最後の30行(71〜100まで)まで繰り返す。 私はこのような何かをしたいサブセット毎回(私はサブサンプルを選択するための他の方法がある知っている)

を選択しますが、機能またはforループ

df30 <- df[1:30,] 
df31 <- df[2:31,] 
df31 <- df[3:32,] 

ので、自動化することができます

Rでこれを行うにはどうすればよいですか?あなたの助けに感謝します

+1

関数を適用する場合は、 '平均' 'ライブラリ(data.table);ライブラリ(動物園); setDT(df)[、rollapply(col1、30、mean)] ' – akrun

+0

あなたの返事をありがとう。私は30の値の平均を取ることを望んでいない、私はちょうどdf30、df31、df32などにそれらを持っているようにしたいですか? –

+0

グローバルenvで複数のオブジェクトを作成することは推奨されません。私はちょうど機能を適用する方法を示しています。実際には、あなたのカスタム関数をrollapplyに適用することができます – akrun

答えて

1

グローバルワークスペースで未接続オブジェクトのコレクションを作成するのではなく、名前付きリストでこれらの結果をアセンブルするとうまくいくでしょう:まずサブセットのリストを作成してから、名前を追加してください:

dflist <- lapply(1:71, function(n) df[n:(n+30), ]) 
names(dflist) <- paste0("df", 30:100) 

その後、lapply機能でこれらをループすることができ、さらには、彼らがためだけでなく、内部的に命名されているを持っているので、forループを使用します。

関連する問題