2013-02-22 45 views
10

this प्रश्न से संबंधित पंक्तियों के प्रतिशत का यादृच्छिक रूप से नमूना लें।डेटा फ्रेम

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), ] 

के बजाय पंक्तियों (3 ऊपर मामले में) के एक नंबर का चयन, मैं कैसे बेतरतीब ढंग से 'एफ' के साथ पंक्तियों के 20% का चयन कर सकते हैं? तो "एफ" के साथ पांच पंक्तियों में से, मैं उन पंक्तियों में से 20% यादृच्छिक रूप से कैसे नमूना करता हूं।

उत्तर

11

कैसे इस बारे में:

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

कहाँ 0.2 अपने 20% है और length(which(mydf$gender=='F')) साथ F

+2

+1, लेकिन मन है कि 20% अलावा कुछ किया जा सकता है एक पूर्णांक से, तो दौर का उपयोग करने की आवश्यकता होगी। –

+1

अच्छा बिंदु, धन्यवाद, मैंने इसे जोड़ा है। वैसे, आप अपने उत्तर – Ben

1

नमूने के लिए 20% पंक्तियों की कुल संख्या है, तो आप इस का उपयोग कर सकते नमूने का आकार पाने के लिए:

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

हाँ में एक कॉमा और क्लोज़ स्क्वायर ब्रैकेट खो रहे हैं, हाँ, मैं ऐसा करने में सक्षम था लेकिन यह एक ऐसी फाइल है जो स्वचालित रूप से स्वचालित होती है और हर घंटे चलती है इसलिए मैं वास्तव में अंदर नहीं जा सकता और मूल्यों को समायोजित नहीं कर सकता/o अन्य लेख लिखना/अगर कोई अन्य कथन। अनुमान लगाया गया है कि एक आसान दृष्टिकोण – ATMathew

+3

होगा यदि आपका प्रश्न अलग है, तो यह आपके प्रश्न का बिल्कुल सही जवाब है, कृपया अधिक जानकारी में संपादित करें। –

+0

कोई भी डाउनवोट पर टिप्पणी करने की परवाह करता है? यह जवाब वास्तव में सवाल का जवाब देता है। –

2

स्व-पदोन्नति चेतावनी। मैंने एक ऐसा फ़ंक्शन लिखा जो सुविधाजनक स्तरीकृत नमूनाकरण की अनुमति देता है, और मैंने नमूनाकरण से पहले समूहीकरण चर से स्तर को सबसेट करने का विकल्प शामिल किया है।

समारोह stratified कहा जाता है और निम्न तरीकों से इस्तेमाल किया जा सकता:

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 

यदि आपका डेटा फ्रेम एक "राज्य" चर शामिल अनेक समूह (उदाहरण के लिए निर्दिष्ट कर सकते हैं और आपके द्वारा समूह चाहता था " राज्य "और" लिंग "आप group = c("state", "gender") निर्दिष्ट करेंगे)। आप कई "चयन" तर्क भी निर्दिष्ट कर सकते हैं (उदाहरण के लिए, यदि आप केवल कैलिफ़ोर्निया और टेक्सास के महिला उत्तरदाताओं को चाहते थे, और आपके "राज्य" चर दो अक्षरों के राज्य संक्षेपों का उपयोग करते थे, तो आप select = list(gender = "F", state = c("CA", "TX")) निर्दिष्ट कर सकते हैं)।

समारोह ही here पाया जा सकता है या आप डाउनलोड करने और पैकेज स्थापित पैकेज "DevTools" से install_github का उपयोग कर के रूप में निम्नानुसार द्वारा (जो आप मदद पेज और उदाहरण के लिए सुविधाजनक पहुँच देता है) कर सकते हैं:

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

आप dplyr पैकेज में sample_frac() फ़ंक्शन का उपयोग कर सकते हैं।

उदा। आप प्रत्येक समूह के भीतर 20% नमूने के लिए करना चाहते हैं:

mydf %>% sample_frac(.2) 

आप प्रत्येक लिंग समूह के भीतर 20% नमूने के लिए करना चाहते हैं:

mydf %>% group_by(gender) %>% sample_frac(.2)