ddply แยกข้อมูลอย่างไร

ฉันมีกรอบข้อมูลนี้

mydf<- data.frame(c("a","a","b","b","c","c"),c("e","e","e","e","e","e")
                  ,c(1,2,3,10,20,30),
                  c(5,10,20,20,15,10))
colnames(mydf)<-c("Model", "Class","Length", "Speed")

ฉันกำลังพยายามทำความเข้าใจให้ดีขึ้นเกี่ยวกับวิธีการทำงานของ ddply

ฉันต้องการทราบความยาวและความเร็วเฉลี่ยสำหรับการจับคู่รุ่นและคลาสแต่ละคู่

ฉันรู้ว่านี่เป็นวิธีหนึ่งที่จะทำ: ddply(mydf, .(Model, Class), .fun = summarize, mSpeed = mean(Speed), mLength = mean(Length))

ฉันสงสัยว่าฉันจะได้ค่าเฉลี่ยโดยใช้ ddply โดยไม่ระบุทีละรายการหรือไม่

ฉันลอง ddply(mydf, .(Model, Class), .fun = mean) แล้ว แต่ได้รับข้อผิดพลาด

ข้อความเตือน: 1: ใน mean.default(piece, ...) : อาร์กิวเมนต์ไม่ใช่ตัวเลขหรือตรรกะ: ส่งคืน NA

ddply ส่งต่อไปยังอาร์กิวเมนต์ของฟังก์ชันอะไร มีวิธีใช้หนึ่งฟังก์ชันกับทุกคอลัมน์โดยใช้ ddply หรือไม่

เป้าหมายของฉันคือการเรียนรู้เพิ่มเติมเกี่ยวกับ ddply ฉันจะยอมรับเฉพาะคำตอบเท่านั้นที่จะ ddply


person ivan    schedule 16.04.2019    source แหล่งที่มา
comment
ในตัวอย่างแรกของคุณ คุณกำลังเรียก summarize ซึ่งคาดว่าจะมีเฟรม อาร์กิวเมนต์ที่ตามมา (mSpeed, ...) จะเป็นอาร์กิวเมนต์ของ summarize ดังนั้นการเรียกผลลัพธ์อาจเป็น summarize(x, mSpeed=mean(Speed), mLength=mean(Length)) ในการเรียกครั้งที่สอง คุณกำลังพยายามส่งผ่านฟูลเฟรมไปที่ mean เมื่อจริงๆ แล้วต้องการเพียงเวกเตอร์เท่านั้น ฉันไม่รู้ว่าทำไมคุณถึงต้องการระบุทีละรายการ (เนื่องจากจะไม่เร็วกว่านี้) แต่ ddply(mydf, .(Model, Class), .fun = summarize, mSpeed=mean(Speed)) ระบุทีละรายการ   -  person r2evans    schedule 17.04.2019
comment
ประเด็นของฉันคือ mSpeed ​​ทำให้ฉันเข้าใจความเร็วเฉลี่ยเท่านั้น จะเกิดอะไรขึ้นถ้า mydf มีคอลัมน์ตัวเลข 20 คอลัมน์ ฉันสามารถใช้มันเพื่อรับค่าเฉลี่ยของแต่ละคอลัมน์แยกตามโมเดลและคลาสได้หรือไม่   -  person ivan    schedule 17.04.2019


คำตอบ (1)


ต่อไปนี้เป็นวิธีแก้ปัญหาโดยใช้ dplyr และฟังก์ชัน summarize



library(dplyr)


mydf<- data.frame(c("a","a","b","b","c","c"),c("e","e","e","e","e","e")
                  ,c(1,2,3,10,20,30),
                  c(5,10,20,20,15,10))
colnames(mydf)<-c("Model", "Class","Length", "Speed")

#summarize data by Model & Class
mydf %>%  group_by(Model, Class) %>% summarize_if(is.numeric, mean)


#> # A tibble: 3 x 4
#> # Groups:   Model [3]
#>   Model Class Length Speed
#>   <fct> <fct>  <dbl> <dbl>
#> 1 a     e        1.5   7.5
#> 2 b     e        6.5  20  
#> 3 c     e       25    12.5

สร้างเมื่อ 16-04-2019 โดย แพ็คเกจ reprex (v0.2.1)

person Ryan John    schedule 16.04.2019
comment
โปรดดูการอัปเดตของฉันในโพสต์ ฉันอยากจะทำมันกับ ddply - person ivan; 17.04.2019