2014-07-10 5 views
20

पर डेटा.table से कुछ यादृच्छिक पंक्तियों को कैसे निकालते हैं मेरे पास एक बड़ा डेटा.table (लगभग 24000 पंक्तियां और बढ़ती हुई) है। मैं उस मानदंड के आधार पर उस मानदंड को सब्सक्राइब करना चाहता हूं और उस सबसेट से (लगभग 3000 पंक्तियों तक समाप्त होता है) मैं यादृच्छिक रूप से केवल 4 पंक्तियों का नमूना देना चाहता हूं। मैं नामित 3000 या तो पंक्ति डेटाटेबल बनाना नहीं चाहता हूं, पंक्तियों के आधार पर अपनी पंक्तियों और फिर नमूना गिनें। मैं इसे फ्लाई पर कैसे कर सकता हूं? या मुझे बस टेबल बनाने और फिर उस पर काम करके इसे छेड़छाड़ करना चाहिए, इसे नमूना देना और फिर इसे छुटकारा पाने के लिए rm() का उपयोग करना चाहिए?आप फ्लाई

चलें ने मेरी समस्या का अनुकरण

require(data.table) 
random.length <- sample(x = 15:30, size = 1) 
data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE)) 

एक यादृच्छिक लंबाई तालिका, जो इस तथ्य मेरी मापदंड के आधार पर और मेरा प्रारंभ तालिका के आधार पर कि simulates बनाता है यही कारण है, मैं नहीं जानता कि क्या साथ subsetted तालिका की लंबाई

हो अब, अगर मैं सिर्फ पहली तीन पंक्तियों मैं के रूप में तो

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[1:3] 

कर सकता है चाहता था लेकिन हम कहते हैं कि मैं प्रथम तीन पंक्तियां नहीं चाहता बल्कि एक था चलो यादृच्छिक 3 पंक्तियां, तो मैं इस तरह कुछ करना चाहता हूं ...

data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(x= 1:number of rows of that previous data.table,size = 3 ] 

यह काम नहीं करेगा। मैं फ्लाई पर गणना कैसे करूं, प्रारंभिक डेटा की लंबाई क्या थी। फ्रेम था?

उत्तर

36

सिर्फ i में .N काम बना दिया है। नई README आइटम:

.N अब i में उपलब्ध है, FR#724। न्यूबी अप्रत्यक्ष रूप से here और फ़ारेरल सीधे here के लिए धन्यवाद।

यह अब काम करता है:

DT[...][...][sample(.N,3)] 

उदा

> random.length <- sample(x = 15:30, size = 1) 
> data.table(city = sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"),size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[sample(.N, 3)] 
     city score 
1: New York  4 
2: Pittsburgh  3 
3: Cape Town  9 
> 
+2

अरे, रफ़ू अच्छा। धन्यवाद। यही वही है जो मैं चाहता था। मुझे एहसास हुआ कि मुझे गिटहब से नवीनतम संस्करण स्थापित करना पड़ा। मैं 'pdflatex उपलब्ध नहीं है' के साथ समस्याओं में भाग गया। मैंने build_vignettes = एफ तर्क के बारे में कहीं कहीं पढ़ा और सब उसके बाद अच्छी तरह से काम किया। 'install_github (" data.table "," rdatatable ", build_vignettes = f)' – Farrel

3

वहाँ एक दो कदम दृष्टिकोण है:

  1. कंप्यूट सूचकांक i सूचकांक i

उदाहरण कोड पर .I

  • नमूना का उपयोग कर।

    require(data.table) 
    random.length <- sample(x = 15:30, size = 1) 
    data.table(city = sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"),size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))[,i := .I][sample(i, 3)] 
    
  • 1

    एक और वैकल्पिक तरीका sapply दृष्टिकोण का उपयोग करना होगा।
    उदाहरण के लिए:

    as.data.table(sapply(DT[], sample, 10)) 
    
    संबंधित मुद्दे