0

。という名前の関数を使用して、同等のgroup by要約を実行しようとしています。3つの列(たとえば、、 )を持つデータフレームがあります。次に、それぞれがデータフレーム(と)に表示される回数をカウントし、列に対応するそれぞれの最後の要素を取得したいと思います。Rplyrddplyidperiodeventidcount(*)... group by idSQLidevent

これが私が持っているものと私が取得しようとしているものの例です:

  id period event #original data frame
  1      1     1
  2      1     0
  2      2     1
  3      1     1
  4      1     1
  4      1     0

  id  t  x #what I want to obtain
  1   1  1
  2   2  1
  3   1  1
  4   2  0

これは私がそのために使用している単純なコードです:

 teachers.pp<-read.table("http://www.ats.ucla.edu/stat/examples/alda/teachers_pp.csv", sep=",", header=T) # whole data frame
 datos=ddply(teachers.pp,.(id),function(x) c(t=length(x$id), x=x[length(x$id),3])) #This is working fine.

今、私はデータ分析のための分割-適用-結合戦略を読んでいて、それらが私が以下に置いたものと同等の構文を採用した例が与えられています:

  datos2=ddply(teachers.pp,.(id), summarise, t=length(id), x=teachers.pp[length(id),3]) #using summarise but the result is not what I want. 

これは私が使用しているデータフレームですdatos2

  id  t  x
  1   1  1
  2   2  0
  3   1  1
  4   1  1

だから、私の質問は、なぜこの結果が最初のコードを使用して得られる結果と異なるのかということdatos1です。私は何が間違っているのですか?

summariseいつ使用する必要があるのか​​わかりませんtransformddply関数の正しい構文を教えてください。

4

1 に答える 1

5

を使用する場合はsummarise、元のデータフレームの参照を停止してください。代わりに、列名で式を記述してください。

あなたはこれを試しました:

ddply(teachers.pp,.(id), summarise, t=length(id), x=teachers.pp[length(id),3])

あなたがおそらく欲しかったのはこのようなものだったとき:

ddply(teachers.pp,.(id), summarise, t=length(id), x=tail(event,1))
于 2012-07-25T21:32:19.440 に答える