2012-06-22 90 views
26

मैं आर के साथ नया हूं। मुझे संचयी आवृत्ति और सापेक्ष आवृत्ति के साथ एक साधारण आवृत्ति तालिका (पुस्तकों में) उत्पन्न करने की आवश्यकता है। मैं जानता हूँ कि यह आसान होना चाहिएसंचयी आवृत्ति और सापेक्ष आवृत्ति के साथ आर में आवृत्ति तालिका कैसे उत्पन्न करें

  frequency cumulative relative 
(9.99,11.7] 2   2  0.04545455 
(11.7,13.4] 2   4  0.04545455 
(13.4,15.1] 1   5  0.02272727 
(15.1,16.9] 10   15  0.22727273 
(16.9,18.6] 22   37  0.50000000 
(18.6,20.3] 6   43  0.13636364 
(20.3,22]  1   44  0.02272727 

, लेकिन मैं पता नहीं कैसे:

तो मैं जैसे कुछ सरल डेटा से

> x 
[1] 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 12 17 17 17 17 17 17 17 17 16 16 16 16 16 18 18 18 10 
[36] 12 15 19 20 22 20 19 19 19 

एक मेज की तरह उत्पन्न करना चाहते हैं।

factorx <- factor(cut(x, breaks=nclass.Sturges(x))) 
as.matrix(table(factorx)) 

उत्तर

24

आप पास कर रहे हैं:

मैं इस कोड का उपयोग कुछ परिणाम मिल गया है! ऐसे कुछ फ़ंक्शन हैं जो आपके लिए यह आसान बना देंगे, अर्थात् cumsum() और prop.table()। यहां बताया गया है कि मैं इसे एक साथ कैसे रखूंगा। मैं कुछ यादृच्छिक डेटा है, लेकिन बात एक ही है:

#Fake data 
x <- sample(10:20, 44, TRUE) 
#Your code 
factorx <- factor(cut(x, breaks=nclass.Sturges(x))) 
#Tabulate and turn into data.frame 
xout <- as.data.frame(table(factorx)) 
#Add cumFreq and proportions 
xout <- transform(xout, cumFreq = cumsum(Freq), relative = prop.table(Freq)) 
#----- 
     factorx Freq cumFreq relative 
1 (9.99,11.4] 11  11 0.25000000 
2 (11.4,12.9] 3  14 0.06818182 
3 (12.9,14.3] 11  25 0.25000000 
4 (14.3,15.7] 2  27 0.04545455 
5 (15.7,17.1] 6  33 0.13636364 
6 (17.1,18.6] 3  36 0.06818182 
7 (18.6,20] 8  44 0.18181818 
+1

भी एक प्लग करने के लिए 'देना चाहिए ?? 'फ़ंक्शन जो अस्पष्ट खोज के लिए अनुमति देता है, यानी' ?? "संचयी योग" आपको सही दिशा में ले जाएगा। – Chase

+1

यह अच्छा काम करता है, यह मुझे भ्रमित कर रहा था कि डेटा का प्रदर्शन ** डेटा फ्रेम ** (तालिका के बजाए) के रूप में किया जाता है। '??' वास्तव में अच्छा है लेकिन मैं मूल अंग्रेजी स्पीकर नहीं हूं इसलिए सहायता खोजना मुश्किल है। – eloyesp

+0

@El_Hoy - 'str (as.data.frame (तालिका (नमूना (1:10, 100, TRUE)) के आउटपुट की तुलना करें)) और' str (तालिका (नमूना (1:10, 100, TRUE))) आउटपुट में अंतर देखने के लिए। डेटा के रूप में स्वरूपण।फ्रेम सिर्फ cumsum और अनुपात जोड़ने के लिए आसान बनाता है। सौभाग्य! यहां SO और बहुत से लोगों पर बहुत अच्छी जानकारी है जो सवालों का जवाब देना पसंद करते हैं। चीयर्स! – Chase

19

आधार कार्य table, cumsum और prop.table तुम वहाँ मिलना चाहिए:

cbind(Freq=table(x), Cumul=cumsum(table(x)), relative=prop.table(table(x))) 
    Freq Cumul relative 
10 2  2 0.04545455 
12 2  4 0.04545455 
15 1  5 0.02272727 
16 10 15 0.22727273 
17 16 31 0.36363636 
18 6 37 0.13636364 
19 4 41 0.09090909 
20 2 43 0.04545455 
22 1 44 0.02272727 
cbind और स्तंभों के नामकरण अपनी पसंद के साथ

भविष्य में यह आपके लिए बहुत आसान होना चाहिए। तालिका फ़ंक्शन से आउटपुट एक मैट्रिक्स है, इसलिए यह परिणाम भी एक मैट्रिक्स है। यदि यह कुछ बड़ा पर किया जा रहा था यह यह कार्यसूची और अधिक कुशल होगा:

tbl <- table(x) 
cbind(Freq=tbl, Cumul=cumsum(tbl), relative=prop.table(tbl)) 
12

आप देख रहे हैं कुछ पहले से पैक किया के लिए, descr पैकेज से freq() समारोह पर विचार करें।

library(descr) 
x = c(sample(10:20, 44, TRUE)) 
freq(x, plot = FALSE) 

या संचयी percents प्राप्त करने के लिए, ordered() समारोह

freq(ordered(x), plot = FALSE) 

का प्रयोग कर एक "संचयी आवृत्तियों" कॉलम जोड़ने के लिए:

tab = as.data.frame(freq(ordered(x), plot = FALSE)) 
CumFreq = cumsum(tab[-dim(tab)[1],]$Frequency) 
tab$CumFreq = c(CumFreq, NA) 
tab 

यदि आपका डेटा गुम मूल्यों, एक वैध प्रतिशत है तालिका में स्तंभ जोड़ा गया है।

x = c(sample(10:20, 44, TRUE), NA, NA) 
freq(ordered(x), plot = FALSE) 
1

फिर भी एक और संभावना:

library(SciencesPo) 
    x = c(sample(10:20, 50, TRUE)) 
    freq(x) 
-1

मेरे सुझाव agricolae पैकेज की जाँच करने के लिए है ... यह बाहर की जाँच:

library(agricolae) 

weight<-c(68, 53, 69.5, 55, 71, 63, 76.5, 65.5, 69, 75, 76, 57, 70.5, 
+ 71.5, 56, 81.5, 69, 59, 67.5, 61, 68, 59.5, 56.5, 73, 
+ 61, 72.5, 71.5, 59.5, 74.5, 63) 

h1<- graph.freq(weight,col="yellow",frequency=1,las=2,xlab="h1") 

print(summary(h1),row.names=FALSE)