ฉันต้องการคำนวณสรุปของตัวแปรใน data.frame สำหรับชุดค่าผสมแต่ละตัวที่ไม่ซ้ำกันของปัจจัยใน data.frame ฉันควรใช้ plyr เพื่อทำสิ่งนี้หรือไม่? ฉันตกลงกับการใช้ลูปแทนการใช้ (); ดังนั้นการหาชุดค่าผสมที่ไม่ซ้ำกันแต่ละชุดจะเพียงพอ
ฉันต้องการคำนวณสรุปของตัวแปรใน data.frame สำหรับชุดค่าผสมแต่ละตัวที่ไม่ซ้ำกันของปัจจัยใน data.frame ฉันควรใช้ plyr เพื่อทำสิ่งนี้หรือไม่? ฉันตกลงกับการใช้ลูปแทนการใช้ (); ดังนั้นการหาชุดค่าผสมที่ไม่ซ้ำกันแต่ละชุดจะเพียงพอ
คำตอบ:
ในขณะที่ฉันคิดว่าaggregateน่าจะเป็นทางออกที่คุณกำลังมองหาหากคุณต้องการสร้างรายการที่ชัดเจนของชุดค่าผสมที่เป็นไปได้ทั้งหมดexpand.gridจะทำเพื่อคุณ เช่น
> expand.grid(height = seq(60, 80, 5), weight = seq(100, 300, 50),
             sex = c("Male","Female"))
       height weight    sex
1      60    100   Male
2      65    100   Male
... 
30     80    100 Female
31     60    150 Female
จากนั้นคุณสามารถวนซ้ำแต่ละแถวในเฟรมข้อมูลผลลัพธ์เพื่อดึงระเบียนจากข้อมูลดั้งเดิมของคุณ
ดูและaggregate byตัวอย่างเช่นจากไฟล์ช่วยเหลือสำหรับaggregate:
## Compute the averages according to region and the occurrence of more
## than 130 days of frost.
aggregate(state.x77,
      list(Region = state.region,
           Cold = state.x77[,"Frost"] > 130),
      mean)
นี่คือโซลูชัน plyr ซึ่งมีข้อดีของการส่งคืนข้อมูลสรุปสถิติจำนวนมากและสร้างแถบความคืบหน้าสำหรับการคำนวณแบบยาว:
library(ez) #for a data set
data(ANT)
cell_stats = ddply(
    .data = ANT #use the ANT data
    , .variables = .(cue,flanker) #uses each combination of cue and flanker
    , .fun = function(x){ #apply this function to each combin. of cue & flanker
        to_return = data.frame(
            , acc = mean(x$acc)
            , mrt = mean(x$rt[x$acc==1])
        )
        return(to_return)
    }
    , .progress = 'text'
)
นอกเหนือจากคำแนะนำอื่น ๆ คุณอาจพบว่าdescribe.by()ฟังก์ชั่นในpsychแพ็คเกจมีประโยชน์ มันสามารถใช้ในการแสดงสถิติสรุปเกี่ยวกับตัวแปรตัวเลขในระดับของตัวแปรปัจจัย
ฉันชอบโดยส่วนตัวcast()จากแพคเกจการก่อร่างใหม่เพราะมันเป็นเรื่องง่าย:
library(reshape)
cast(melt(tips), sex ~ smoker | variable, c(sd,mean, length))
ในlibrary(doBy)นอกจากนี้ยังมีsummaryBy()ฟังก์ชั่นเช่น
summaryBy(DV1 + DV2 ~ Height+Weight+Sex,data=my.data)