ggplot2 में दो कॉलम द्वारा समूह


90

क्या दो कॉलम द्वारा समूह बनाना संभव है? तो पार उत्पाद द्वारा तैयार की है geom_point()और geom_smooth()?

उदाहरण के रूप में:

frame <- data.frame(
 series <- rep(c('a', 'b'), 6), 
 sample <- rep(c('glass','water', 'metal'), 4), 
 data <- c(1:12))

ggplot(frame, aes()) # ...

ऐसा है कि अंक 6और 12एक समूह को साझा करें, लेकिन साथ नहीं 3

जवाबों:


32

क्यों नहीं बस pasteउन दो स्तंभों को एक साथ और उस चर को समूहों के रूप में उपयोग करें ?

frame$grp <- paste(frame[,1],frame[,2])

ऐसा करने के लिए कुछ अधिक औपचारिक तरीका फ़ंक्शन का उपयोग करना होगा interaction


27
मुझे लगता है कि आपको data.frameकिसी प्लॉट के उद्देश्य से संशोधित नहीं करना चाहिए । plotअपने df और नहीं विपरीत साजिश चाहिए।
क्लेमेंटवेल्टर

3
मैं मानता हूं, ब्लू मैजिस्टर का जवाब बेहतर है।
जेस्टन

6
@clemlaflemme मुझे लगता है कि BlueMagister का जवाब ठीक है, हालांकि मुझे लगता है कि इस मामले में भेद काफी मामूली है। लेकिन जिस सामान्य स्थिति में आपको किसी प्लॉट के लिए अपने डेटा फ्रेम को संशोधित नहीं करना चाहिए, वह एक उत्सुक है जिसने ggplot2 का उपयोग करने के लिए आपकी पसंद को देखते हुए , जिसमें से पूरी डिज़ाइन को ggplot के शब्दार्थ के साथ काम करने के लिए आपके डेटा को स्पष्ट रूप से संरचित करने के लिए निर्धारित किया गया है।
जोरान

इसका एक नुकसान pasteयह है कि जब इनपुट एक कारक होता है, तो यह उन स्तरों को छोड़ देता है, जहां interactionमूल कारकों का क्रम संरक्षित रहता है। इसका मतलब यह है कि समूहों को स्वाभाविक रूप से interactionदृष्टिकोण के साथ आदेश दिया जाता है।
कोटा मोरी

172

इस प्रश्न से उदाहरण लेते हुए , interactionदो कॉलम को एक नए कारक में संयोजित करने के लिए

# Data frame with two continuous variables and two factors 
set.seed(0)
x <- rep(1:10, 4)
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5)
treatment <- gl(2, 20, 40, labels=letters[1:2])
replicate <- gl(2, 10, 40)
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate)

ggplot(d, aes(x=x, y=y, colour=treatment, shape = replicate,
  group=interaction(treatment, replicate))) + 
  geom_point() + geom_line()

ggplot उदाहरण


यह मेरे लिए काम करता है:ggplot(df) + geom_violin(aes(class1, metric.var, group = interaction(class1, class2)), position = position_dodge(width=.5))
ivan866

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.