2012-06-22 90 views
26

Tôi mới với R. Tôi cần tạo Bảng tần số đơn giản (như trong sách) với tần suất tích lũy và tần số tương đối.Cách tạo bảng tần số trong R với tần số tích lũy và tần số tương đối

Vì vậy, tôi muốn tạo ra từ một số dữ liệu đơn giản như

> 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 

một bảng như:

  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 

Tôi biết điều đó nên được đơn giản, nhưng tôi không biết làm thế nào.

tôi có một số kết quả sử dụng mã này:

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

Trả lời

24

Bạn đang gần! Có một vài chức năng giúp bạn dễ dàng thực hiện điều này, cụ thể là cumsum()prop.table(). Đây là cách tôi có thể đặt điều này lại với nhau. Tôi làm cho một số dữ liệu ngẫu nhiên, nhưng điểm là như nhau:

#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

cũng nên cung cấp một plug cho '?? 'hàm cho phép tìm kiếm mờ, nghĩa là tổng tích lũy' ?? "sẽ dẫn bạn đi đúng hướng. – Chase

+1

Nó làm việc tốt đẹp, nó đã gây nhầm lẫn cho tôi rằng việc hiển thị dữ liệu được thực hiện như một khung dữ liệu ** ** (thay vì một bảng). Các '??' là thực sự tốt nhưng tôi không phải là người nói tiếng Anh bản địa vì vậy rất khó để tìm kiếm sự giúp đỡ. – eloyesp

+0

@El_Hoy - so sánh đầu ra của 'str (as.data.frame (bảng (mẫu (1:10, 100, TRUE))))' và 'str (bảng (mẫu (1:10, 100, TRUE))) 'để thấy sự khác biệt trong đầu ra. Định dạng dưới dạng dữ liệu.khung chỉ làm cho nó dễ dàng hơn để thêm cumsum và tỷ lệ. Chúc may mắn! Rất nhiều thông tin tốt ở đây trên SO và rất nhiều người thích trả lời câu hỏi. Chúc mừng! – Chase

19

Các chức năng cơ sở table, cumsumprop.table sẽ giúp bạn có:

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 

Với cbind và đặt tên của các cột theo ý thích của bạn điều này sẽ khá dễ dàng cho bạn trong tương lai. Đầu ra từ hàm bảng là một ma trận, do đó kết quả này cũng là một ma trận. Nếu đây đã được thực hiện trên một cái gì đó lớn nó sẽ hiệu quả hơn todo này:

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

Nếu bạn đang tìm kiếm một cái gì đó trước khi đóng gói, hãy xem xét freq() chức năng từ gói descr.

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

Hoặc để có được phần trăm tích lũy, sử dụng ordered() chức năng

freq(ordered(x), plot = FALSE) 

Để thêm một "tần số tích lũy" cột:

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

Nếu dữ liệu của bạn có giá trị mất tích, một tỷ lệ hợp lệ cột được thêm vào bảng.

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

Tuy nhiên, một khả năng:

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

Đề nghị của tôi là để kiểm tra agricolae gói ... check it out:

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) 
Các vấn đề liên quan