ฮิสโตแกรมแบบมีเงื่อนไขกับชุดย่อยของข้อมูลใน R

ฉันยังใหม่กับ R (โดยเฉพาะแพ็คเกจกราฟิก) และฉันมีปัญหาในการสร้างฮิสโทแกรมแบบมีเงื่อนไข

เมื่อพิจารณาจากกรอบข้อมูลสมมุติ df:

df<-as.data.frame(cbind(y=c(1:5),a=c(1,1,2,2,3),b=c(2,3,3,4,5), c=c(3,4,5,6,7)))

ฉันต้องการสร้างฮิสโตแกรมของ y แบบมีเงื่อนไขบนชุดค่าผสมเฉพาะของ a, b และ c:

groups<-unique(cbind(df$a,df$b,df$c))

(ฉันเข้าใจว่าฮิสโตแกรมที่ใช้กรอบข้อมูลเฉพาะนี้ไม่สมเหตุสมผลนัก แต่เพื่อความเรียบง่ายและกะทัดรัดก็จะใช้ได้)

แน่นอนว่าฉันสามารถดูค่าเฉพาะของตัวแปรการปรับสภาพของฉันและเขียนโค้ดสำหรับฮิสโตแกรมแต่ละอันแยกกัน แต่ฉันต้องการให้กระบวนการเป็นแบบอัตโนมัติ:

library(lattice)
for (i in 1:5) {    #for the 5 unique groups
    histogram(~y | a==groups[i,1] & b==groups[i,2] & c==groups[i,3], data=df)
    dev.new()
}

รหัสนี้ดำเนินการและเปิดหน้าต่างกราฟิกในจำนวนที่ถูกต้อง แต่ไม่มีผลลัพธ์ นอกจากนี้ หากมีอาร์กิวเมนต์ที่จะเพิ่มลงในฟังก์ชันฮิสโตแกรมซึ่งจะบังคับให้เอาต์พุตแสดงเฉพาะเมื่อตรงตามเงื่อนไขเท่านั้น (แทนที่จะแสดงทั้งบานหน้าต่าง TRUE และ FALSE) ฉันก็สนใจที่จะเรียนรู้เช่นกัน

ขอบคุณ


person ander2ed    schedule 12.12.2014    source แหล่งที่มา


คำตอบ (1)


แค่ย้ายความคิดเห็นของฉันไปที่คำตอบ นี่เป็นเรื่องง่ายมากใน ggplot โดยใช้ facet_wrap

library(ggplot2)
ggplot(df, aes(x = y)) +
    geom_histogram() + 
    facet_wrap(~ a + b + c)

การแสดงกราฟในหน้าต่างต่างๆ จะไม่รวมอยู่ใน ggplot เพื่อสิ่งนั้นฉันคงจะ

#create a grouping variable
df$group = paste(df$a, df$b, df$c)

# split the data frame
df.list <- split(df, df$group)

# apply a function to each piece
lapply(df.list, FUN = function(data) print(qplot(data$y)))

ด้วยวิธี split และ lapply คุณสามารถกำหนดฟังก์ชันใดก็ได้ที่คุณต้องการได้อย่างง่ายดาย hist(), histogram() ฯลฯ ด้วยข้อมูลปัจจุบันของคุณ hist() จะแสดงให้คุณเห็นเพียงสี่เหลี่ยมเดียว แต่หากมีข้อมูลเพิ่มเติมก็จะดูถูกต้อง

person Gregor Thomas    schedule 12.12.2014
comment
ขอบคุณ ฉันได้ดูแพ็คเกจ ggplot2 มาบ้างแล้ว แต่ฉันไม่คุ้นเคยมากนัก มีวิธีแสดงฮิสโตแกรมในหน้าต่างแยกโดยใช้วิธีนี้หรือไม่? - person ander2ed; 13.12.2014
comment
หากคุณบังคับแง่มุมให้เป็น 1 x 1 และทำสิ่งนี้ในอุปกรณ์ที่มีหลายหน้า คุณจะได้รับพล็อตในหน้าแยกกัน - person IRTFM; 13.12.2014