r - फैक्टर वेरिएबल्स के लिए फ़्रीक्वेंसी हिस्टोग्राम करें




histogram categorical-data (4)

मैं आर के लिए बहुत नया हूं, इसलिए मैं इस तरह के मूल प्रश्न के लिए माफी चाहता हूं। मैंने इस मुद्दे पर एक घंटे गुजारने का समय बिताया, लेकिन कोई हल नहीं निकल सका।

कहो कि मेरे डेटा में कुछ सामान्य श्रेणी के पालतू जानवरों के बारे में कुछ स्पष्ट डेटा है। मैं इसे R में एक चरित्र वेक्टर के रूप में इनपुट करता हूं जिसमें विभिन्न प्रकार के जानवरों के नाम हैं। मैंने इसे इस तरह बनाया है:

animals <- c("cat", "dog",  "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")

मैं इसे अपने डेटा फ्रेम में अन्य वैक्टर के साथ उपयोग करने के लिए एक कारक में बदल देता हूं:

animalFactor <- as.factor(animals)

अब मैं एक हिस्टोग्राम बनाना चाहता हूं जो y- अक्ष पर प्रत्येक चर की आवृत्ति को दिखाता है, एक्स-अक्ष पर प्रत्येक कारक का नाम है, और प्रत्येक कारक के लिए एक बार शामिल है। मैं इस कोड का प्रयास करता हूं:

hist(table(animalFactor), freq=TRUE, xlab = levels(animalFactor), ylab = "Frequencies")

आउटपुट बिल्कुल कुछ भी नहीं है जैसे मुझे उम्मीद थी। समस्याओं को एक तरफ रखकर, मैं यह पता नहीं लगा सकता कि श्रेणी द्वारा एक साधारण आवृत्ति हिस्टोग्राम कैसे बनाया जाए।


अप्रत्याशित परिणाम प्राप्त करने का कारण यह है कि hist(...) एक संख्यात्मक वेक्टर से वितरण की गणना करता है। आपके कोड में, table(animalFactor) तीन तत्वों के साथ एक संख्यात्मक वेक्टर की तरह व्यवहार करता है: 1, 3, 7. तो hist(...) 1 की संख्या (1), 3 की संख्या (1), और संख्या को प्लॉट करता है। 7 का (1)। @ रोलैंड का समाधान सबसे सरल है।

यहाँ ggplot का उपयोग करने का एक तरीका दिया गया है:

library(ggplot2)
ggp <- ggplot(data.frame(animals),aes(x=animals))
# counts
ggp + geom_histogram(fill="lightgreen")
# proportion
ggp + geom_histogram(fill="lightblue",aes(y=..count../sum(..count..)))

आपको ऊपर दिए गए कोड में animals बजाय animalFactor का उपयोग करके ठीक वही परिणाम मिलेगा।


ऐसा लगता है कि आप barplot(prop.table(table(animals))) चाहते हैं barplot(prop.table(table(animals))) :

हालाँकि, यह हिस्टोग्राम नहीं है।


प्लॉट फ़ंक्शन के इनपुट के रूप में कारक के रूप में डेटा का उपयोग किया जा सकता है।

इसी तरह के एक प्रश्न का उत्तर यहां दिया गया है: https://stat.ethz.ch/pipermail/r-help/2010-December/261873.html

 x=sample(c("Richard", "Minnie", "Albert", "Helen", "Joe", "Kingston"),  
 50, replace=T)
 x=as.factor(x)
 plot(x)

यदि आप geom_histogram() में ऐसा करना चाहते हैं, तो एक API परिवर्तन geom_histogram() में किया गया था जो त्रुटि की ओर जाता है: https://github.com/hadley/ggplot2/issues/1465

इसके आसपास जाने के लिए, geom_bar() उपयोग करें:

animals <- c("cat", "dog",  "dog", "dog", "dog", "dog", "dog", "dog", "cat", "cat", "bird")

library(ggplot2)
# counts
ggplot(data.frame(animals), aes(x=animals)) +
  geom_bar()





categorical-data