2

とりわけ、Excelスプレッドシートからスクレイプしたデータフレームをクリーンアップし、いくつかの数値からパーセント記号を削除しました。 「データフレームからのパーセンテージの削除」を参照してください。

データには、3回行われた8回の実験のパラメーターと結果を表す24行があります。たとえば、何から得られるか、

DF1 <- data.frame(X = 1:24, Y = 2 * (1:24), Z = 3 * (1:24))

それぞれの3つの平均(幸いなことに順番に並んでいます)を見つけて、8行と同じ数の列を持つ新しいデータフレームを作成したいと思います。

私はこれを使ってみました、

DF2 <- data.frame(replicate(3,sapply(DF1, mean)))

これにより、各列の平均が3回行として得られました。私は私に与えるデータフレームを取得したかった、

data.frame(X = c(2,5,8,11,14,17,20,23), Y = c(4,10,16,22,28,34,40,23), Z = c(6,15,24,33,42,51,60,69))

手作業で作成しました。それは減少した結果であると思われます。

ありがとう、 ...

どんな助けでもありがたいことに受け取られるでしょう。

4

2 に答える 2

4

コードゴルフのナイスタスク!

aggregate(DF1, list(rep(1:8, each=3)), mean)[,-1]

より一般的にするには、 に置き換える必要があり8ますnrow(DF1)

... または、私のお気に入りは、行列の乗算を使用します。

t(t(DF1) %*% diag(8)[rep(1:8,each=3),]/3)
于 2013-01-18T13:18:15.570 に答える
1

これは機能します:

foo <- matrix(unlist(by(data=DF1,INDICES=rep(1:8,each=3),FUN=colMeans)),
  nrow=8,byrow=TRUE)
colnames(foo) <- colnames(DF1)

を見てください?by

于 2013-01-18T13:06:25.347 に答える