2013-02-22 34 views
10

Liên quan đến this câu hỏi.Lấy mẫu ngẫu nhiên một tỷ lệ phần trăm các hàng trong một khung dữ liệu

gender <- c("F", "M", "M", "F", "F", "M", "F", "F") 
age <- c(23, 25, 27, 29, 31, 33, 35, 37) 
mydf <- data.frame(gender, age) 

mydf[ sample(which(mydf$gender=='F'), 3), ] 

Thay vì chọn một số hàng (3 trong trường hợp trên), làm cách nào tôi có thể chọn ngẫu nhiên 20% hàng với "F"? Vì vậy, trong năm hàng với "F", làm thế nào để tôi lấy mẫu ngẫu nhiên 20% của những hàng đó.

Trả lời

11

Làm thế nào về điều này:

mydf[ sample(which(mydf$gender=='F'), round(0.2*length(which(mydf$gender=='F')))), ] 

đâu 0,2 là 20% của bạn và length(which(mydf$gender=='F')) là tổng số hàng với F

+2

+1, nhưng nhớ rằng 20% ​​có thể là cái gì khác hơn một số nguyên, vì vậy việc sử dụng vòng sẽ là cần thiết. –

+1

điểm tốt, cảm ơn, tôi đã thêm vào đó. Bằng cách này, bạn đang thiếu dấu phẩy và dấu ngoặc vuông trong câu trả lời của bạn – Ben

1

Để lấy mẫu 20%, bạn có thể sử dụng để có được kích thước mẫu:

n = round(0.2 * nrow(mydf[mydf$gender == "F",])) 
+0

Vâng, tôi có thể làm điều đó nhưng đây là một tệp tự động và chạy mỗi giờ vì vậy tôi không thể thực sự đi vào và điều chỉnh các giá trị bằng cách viết một hàm khác với câu lệnh if else. Hình như có một cách tiếp cận đơn giản hơn – ATMathew

+3

Đây chính xác là câu trả lời cho câu hỏi của bạn, nếu câu hỏi của bạn khác, vui lòng chỉnh sửa chi tiết hơn. –

+0

Bất cứ ai quan tâm để bình luận về downvote? Câu trả lời này trả lời chính xác câu hỏi. –

2

Cảnh báo tự quảng cáo. Tôi đã viết một hàm cho phép lấy mẫu phân tầng thuận tiện, và tôi đã bao gồm một tùy chọn để tập hợp các mức từ các biến nhóm trước khi lấy mẫu.

Các hàm được gọi stratified và có thể được sử dụng trong các cách sau:

set.seed(1) 
# Proportional sample 
stratified(mydf, group="gender", size=.2, select=list(gender = "F")) 
# gender age 
# 4  F 29 
# Fixed-size sampling 
stratified(mydf, group="gender", size=2, select=list(gender = "F")) 
# gender age 
# 4  F 29 
# 5  F 31 

Bạn có thể chỉ định nhiều nhóm (ví dụ nếu khung dữ liệu của bạn bao gồm một "nhà nước" biến và bạn muốn vào nhóm bằng cách " trạng thái "và" giới tính "bạn sẽ chỉ định group = c("state", "gender")). Bạn cũng có thể chỉ định nhiều đối số "chọn" (ví dụ: nếu bạn chỉ muốn người trả lời là nữ từ California và Texas và biến "tiểu bang" của bạn sử dụng chữ viết tắt hai chữ cái của tiểu bang, bạn có thể chỉ định select = list(gender = "F", state = c("CA", "TX"))).

Chức năng chính nó có thể được tìm thấy here hoặc bạn có thể tải về và cài đặt gói (trong đó cung cấp cho bạn truy cập thuận tiện tới các trang trợ giúp và các ví dụ) bằng cách sử dụng install_github từ "DevTools" gói như sau:

# install.packages("devtools") 
library(devtools) 
install_github("mrdwabmisc", "mrdwab") 
5

Bạn có thể sử dụng chức năng sample_frac() trong gói dplyr.

ví dụ: Nếu bạn muốn lấy mẫu 20% trong mỗi nhóm:

mydf %>% sample_frac(.2) 

Nếu bạn muốn lấy mẫu 20% trong mỗi nhóm giới tính:

mydf %>% group_by(gender) %>% sample_frac(.2) 
Các vấn đề liên quan