ฉันกำลังพยายามสรุป group by
ที่เทียบเท่าใน R
ผ่านฟังก์ชัน plyr
ชื่อ ddply
ฉันมีกรอบข้อมูลที่มีสามคอลัมน์ (พูด id
, period
และ event
) จากนั้น ฉันต้องการนับเวลาที่แต่ละ id
ปรากฏในกรอบข้อมูล (count(*)... group by id
พร้อมด้วย SQL
) และรับองค์ประกอบสุดท้ายของแต่ละ id
ที่สอดคล้องกับคอลัมน์ event
นี่คือตัวอย่างของสิ่งที่ฉันมีและสิ่งที่ฉันพยายามที่จะได้รับ:
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.
ตอนนี้ ฉันได้อ่าน The Split-Apply-Combine Strategy for Data Analysis แล้ว ได้รับตัวอย่างที่พวกเขาใช้ไวยากรณ์ที่เทียบเท่ากับที่ฉันใส่ไว้ด้านล่าง:
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
หรือ transform
คุณช่วยบอกไวยากรณ์ที่ถูกต้องสำหรับฟังก์ชัน ddply
ให้ฉันหน่อยได้ไหม