2013-07-28 26 views
6

Có cách nào để tập hợp tất cả các cấp của một yếu tố đơn lẻ trong một lần đổ sạch không?Tập hợp tất cả các cấp của một hệ số đơn lẻ

Trường hợp: Giả sử bạn có khung dữ liệu trong đó một trong các cột là yếu tố (dữ liệu $ factor) và bạn muốn tạo các khung dữ liệu tập hợp con chứa chỉ một mức của yếu tố. Việc này đơn giản khi thực hiện khi có một số lượng nhỏ các yếu tố bằng cách viết các lệnh tập con riêng biệt. Tuy nhiên, điều gì xảy ra nếu bạn có một số lượng lớn các cấp (ví dụ: 50+ cấp độ)? Có một lệnh hoặc một cách thông minh để tạo ra tất cả các tập con trong trường hợp như vậy mà không cần phải viết hơn 50 lệnh tập hợp con?

+1

Vâng, thấy split?. –

+0

@HongOoi Chỉ cần thử nó - có vẻ như để làm các trick. Tuy nhiên, các nhóm/nhóm con tất cả đi vào một biến (ví dụ, tập hợp con <-split (df, dữ liệu $ factor, drop = FALSE). Làm thế nào để truy cập từng tập con trong một biến "tập hợp con"? – whistler

+0

@HongOoi Trong trường hợp, bất cứ ai quan tâm, các nhóm có thể được truy cập từ tập con, ví dụ: nhóm1 <-subsets [[1]], group2 <-subsets [[2]], v.v. – whistler

Trả lời

12

Mà không cần phải tạo ra một vòng lặp, hàm SPLIT là chìa khóa để giải quyết vấn đề này.

Giả sử cột yếu tố bạn muốn tập hợp con (hoặc nhóm) là trong cột "tố" của khung dữ liệu "data" làm:

subsets<-split(data, data$factor, drop=TRUE) 

này sẽ tạo ra một danh sách các tập con dựa trên yếu tố giá trị. Danh sách sẽ có cùng độ dài với số lượng các yếu tố.

Nếu bạn cần phải đưa từng nhóm nhỏ trong một khung dữ liệu riêng biệt, bạn có thể truy cập chúng bằng cách làm như sau:

group1<-subsets[[1]] 
group2<-subsets[[2]] 
... 
0

Bạn có thể tạo một vòng lặp qua các giá trị yếu tố yêu cầu như sau:

vals <- sort (unique (data[[factor]])) 
for (i in 1:length(vals)) { 
    subset <- (data[[factor]]==vals[i]) 
    n <- length (data[[factor]][(subset)]) 
    if (n >= min.n) { 
     ... 
    } 
} 
Các vấn đề liên quan