3

X、Yプロファイル番号と関連する深度で地理参照されたデータセットがあります。

Dataset
X = c(1:10)
Y=c(11:20)
Profile=c(298,298,298,299,299,299,300,300,301,301)
Depth=c(-1,-1,-2,-1,-2,-3,-1,-1,-1,-2)
df=as.data.frame(cbind(X,Y,Profile,Depth))

私のデータセットは次のようになります。

        X  Y Profile Depth
1   1 11     298    -1
2   2 12     298    -1
3   3 13     298    -2
4   4 14     299    -1
5   5 15     299    -2
6   6 16     299    -3
7   7 17     300    -1
8   8 18     300    -1
9   9 19     301    -1
10 10 20     301    -2

私がやろうとしているのは、各プロファイル内の深度の重複をマージし、マージされた重複のXとYの平均を計算し、プロファイル番号を関連付けたままにすることです。

パッケージplyrを使用して、プロファイルごとに複製をマージできます。

out=ddply(df,.(Profile,Depth),summarize, Depth=unique(Depth))

  Profile Depth
1     298    -2
2     298    -1
3     299    -3
4     299    -2
5     299    -1
6     300    -1
7     301    -2
8     301    -1

しかし、マージされた深さのX列とY列の平均を抽出する方法が見つかりません。ヒントはありますか?よろしくお願いします。

4

2 に答える 2

2

の場合と同じ方法で、Xun値の計算と名前を追加する必要があります。YDepth

 ddply(df,.(Profile,Depth),summarize, X=mean(X),Y=mean(Y), Depth=unique(Depth))
  Profile    X    Y Depth
1     298  3.0 13.0    -2
2     298  1.5 11.5    -1
3     299  6.0 16.0    -3
4     299  5.0 15.0    -2
5     299  4.0 14.0    -1
6     300  7.5 17.5    -1
7     301 10.0 20.0    -2
8     301  9.0 19.0    -1
于 2013-03-18T15:49:17.627 に答える
2

data.table代替。これは、よりも高速でddply、大規模なデータに合わせて拡張できます。タイピングも少なくなります!

  library(data.table)
  DT <- data.table(df)
  DT[, lapply(.SD, mean) ,by = list(Profile, Depth)]

ノート

  • .SD各グループのdata.tableのサブセットです
  • lapply(.SD, mean)の各列の平均を計算します.SD
  • 列のサブセットのみが必要な場合は、これをに渡します.SDcols
于 2013-03-18T22:14:32.697 に答える