1

私は次のようなデータセットを持っています:

i,o,c
A,4,USA
B,3,CAN
A,5,USA
C,4,MEX
C,1,USA
A,3,CAN

このデータセットを次のような形式に変換したいと思います。

i,u,o,c
A,3,4,2
B,1,3,1
C,2,2.5,1

ここで、uは、データセット内の変数iの一意のインスタンスを表し、o =(o / uの合計)およびc=一意の国を表します。

次のステートメントとplyrを使用してuを取得できます。

count(df1,vars="i")

前の質問から学んだ洞察を使用して、他の変数のいくつかを取得することもできます。骨の折れる作業で、複数のデータフレームに保存し、最終的にそれらを結合することで、1行の最適化があるのか​​、それとも現在の長い道のりよりも優れた方法があるのか​​、意図した結果を得ることができます。

ありがとう !

4

1 に答える 1

4

これがあなたの以前の質問とどう違うのかわかりません。アプローチは同じです:

library(plyr)
ddply(mydf, .(i), summarise, 
      u = length(i), 
      o = mean(o),
      c = length(unique(c)))
#   i u   o c
# 1 A 3 4.0 2
# 2 B 1 3.0 1
# 3 C 2 2.5 2

あなたがdata.table解決策を好むなら:

> library(data.table)
> DT <- data.table(mydf)
> DT[, list(u = .N, o = mean(o), c = length(unique(c))), by = "i"]
   i u   o c
1: A 3 4.0 2
2: B 1 3.0 1
3: C 2 2.5 2
于 2013-03-21T18:20:17.663 に答える