2010-07-05 70 views
5

Có cách nào đơn giản để xác định số lần giá trị nằm trong vectơ hoặc cột của khung dữ liệu không? Về cơ bản, tôi muốn các giá trị số của một biểu đồ nhưng tôi không biết cách truy cập nó.Làm cách nào để đếm số lần giá trị xuất hiện trong cột của một khung dữ liệu?

# sample vector 
a <- c(1,2,1,1,1,3,1,2,3,3) 

#hist 
hist(a) 

Cảm ơn bạn.

UPDATE:

On gợi ý Dirk của tôi đang sử dụng hist. Có cách nào tốt hơn là chỉ định phạm vi là 1,9, 2,9 vv khi tôi biết rằng tất cả các giá trị của tôi là số nguyên?

hist(a, breaks=c(1,1.9,2.9,3.9,4.9,5.9,6.9,7.9,8.9,9.9), plot=FALSE)$counts 
+0

cảm ơn tất cả các bạn đã đề xuất. Tôi không biết đủ về chủ đề này để hiểu được sự tinh tế của bảng v hist; và tìm thấy lịch sử dễ sử dụng nhất, do đó đánh dấu nó là câu trả lời hay nhất. – djq

Trả lời

8

Hãy thử điều này:

R> a <- c(1,2,1,1,1,3,1,2,3,3) 
R> b <- hist(a, plot=FALSE) 
R> str(b) 
List of 7 
$ breaks  : num [1:5] 1 1.5 2 2.5 3 
$ counts  : int [1:4] 5 2 0 3 
$ intensities: num [1:4] 1 0.4 0 0.6 
$ density : num [1:4] 1 0.4 0 0.6 
$ mids  : num [1:4] 1.25 1.75 2.25 2.75 
$ xname  : chr "a" 
$ equidist : logi TRUE 
- attr(*, "class")= chr "histogram" 
R> 

R là hướng đối tượng và hầu hết các phương pháp cung cấp cho bạn kết quả có ý nghĩa lại. Sử dụng chúng.

+0

Tôi nghĩ rằng việc sử dụng lịch sử là một ý tưởng tồi, bởi vì nó tính toán số lượng thùng, không tính giá trị cụ thể. – mbq

+0

Cảm ơn Dirk - Tôi hiểu rằng R là hướng đối tượng, nhưng tôi không biết làm thế nào để tìm ra rằng lô = FALSE là một đối số tôi có thể vượt qua để lịch, ví dụ. – djq

+3

Thử 'help (hist)'. –

20

Sử dụng chức năng table.

+0

Khi bạn đang rên rỉ về đề nghị của tôi về 'hist' (mặc dù đó là những gì OP hỏi về !!), hãy để tôi đề cập rằng 'table()' có một nhược điểm tối: đã từng thử nó với hàng nghìn giá trị duy nhất trong đối tượng bạn đang lập bảng? ;-) Vào cuối ngày, cả hai đều có giá trị, nhưng cho các mục đích khác nhau. Như là 'cut()', 'quantile()' etc pp –

+0

Tôi hài lòng với bất kỳ phương thức nào trả về số lượng giá trị, và có vẻ như tôi có thể kiểm soát số lần ngắt. Tuy nhiên, tôi không hiểu kết quả từ lịch sử: ví dụ: hist (a, breaks = 3, plot = FALSE) $ count trả về 5 2 0 3 – djq

+0

@Dirk Tôi không bị giật mình; trong quan điểm của tôi sử dụng bảng là một câu trả lời chung và lịch sử là một tối ưu hóa cho trường hợp khi số lượng các giá trị duy nhất là lớn; thực sự chiến đấu với thùng khi bạn có vài con số để đếm không phải là ở tất cả thanh lịch và thậm chí có thể không hiệu quả. – mbq

5

Nếu bạn muốn sử dụng hist bạn không cần phải xác định vi phạm như bạn đã làm, chỉ cần sử dụng chức năng seq

br <- seq(0.9, 9.9, 1) 
num <- hist(a, br, plot=F)$counts 

Ngoài ra, nếu bạn đang tìm kiếm một giá trị cụ thể mà bạn cũng có thể sử dụng which.

Ví dụ:

num <- length(which(a == 1)) 
2

Ngoài sự khác biệt về hiệu năng giữa histtable trong trường hợp nhiều giá trị độc đáo mà Dirk và MBq đã chỉ ra, tôi cũng muốn đề cập đến một sự khác biệt khác về tính năng .

hist$counts cũng sẽ cung cấp cho bạn số lượng không cho các thùng không có bất kỳ trường hợp nào. Điều này có thể rất có giá trị trong trường hợp bạn muốn tự tin về số lượng thùng (thanh trên một ví dụ) mà sẽ kết thúc trong một âm mưu sau đây.

table mặt khác sẽ chỉ cung cấp cho bạn số lượng cho giá trị hiện tại.

Bạn cũng có thể muốn kiểm tra tùy chọn right của hist kiểm soát xem thời gian nghỉ (khoảng thời gian) của bạn có được đóng lại hay không.

Các vấn đề liên quan