Saya mencoba melakukan ringkasan group by
yang setara di R
melalui fungsi plyr
bernama ddply
. Saya memiliki bingkai data yang memiliki tiga kolom (misalnya id
, period
dan event
). Lalu, saya ingin menghitung berapa kali setiap id
muncul di bingkai data (count(*)... group by id
dengan SQL
) dan mendapatkan elemen terakhir dari setiap id
yang sesuai dengan kolom event
.
Berikut contoh apa yang saya miliki dan apa yang saya coba peroleh:
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
Ini adalah kode sederhana yang saya gunakan untuk itu:
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.
Sekarang, saya telah membaca Strategi Split-Apply-Combine untuk Analisis Data dan itu diberikan contoh di mana mereka menggunakan sintaksis yang setara dengan yang saya masukkan di bawah:
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.
Ini adalah bingkai data yang saya dapatkan menggunakan datos2
id t x
1 1 1
2 2 0
3 1 1
4 1 1
Jadi, pertanyaan saya adalah: mengapa hasil ini berbeda dengan yang saya dapatkan menggunakan potongan kode pertama, maksud saya datos1
? Apa yang saya lakukan salah?
Tidak jelas bagi saya kapan saya harus menggunakan summarise
atau transform
. Bisakah Anda memberi tahu saya sintaks yang benar untuk fungsi ddply
?