2013-04-18 4 views
6

मेरे पास डेटा के दो सेट हैं, जिनमें प्री और पोस्ट डेटा शामिल है। उत्तरदाताओं के पास अद्वितीय आईडी होती हैं, और मैं एक सबसेट बनाना चाहता हूं जिसमें केवल उन दोनों शामिल हैं जिन्होंने सर्वेक्षणों का जवाब दिया। उदाहरण डाटासेट:दो डेटासेट में मिलान आईडी

pre.data <- data.frame(ID = c(1:10), Y = sample(c("yes", "no"), 10, replace = TRUE), 
    Survey = 1) 

post.data <- data.frame(ID = c(1:3,6:10), Y = sample(c("yes", "no"), 8, replace = TRUE), 
    Survey = 2) 

all.data <- rbind(pre.data, post.data) 

मैं निम्नलिखित कार्य हो:

match <- function(dat1, dat2, dat3){ #dat1 is whole dataset(both stitched together) 
    #dat2 is pre dataset #dat3 is post dataset 
    selectedRows <- (dat1$ID %in% dat2$ID & 
        dat1$ID %in% dat3$ID) 

    matchdata <- dat1[selectedRows,] 
    return(matchdata) 
} 

prepost.match.data <- match(all.data, pre.data, post.data) 

मुझे लगता है कि ही बात कर के इस समारोह की तुलना में एक बेहतर तरीका होना चाहिए, लेकिन मैं कैसे सोच नहीं सकता। मैंने यह कैसे किया है यह थोड़ा गन्दा लगता है। मेरा मतलब है, यह काम करता है - यह वही करता है जो मैं चाहता हूं, लेकिन मैं सोचने में मदद नहीं कर सकता कि एक बेहतर तरीका है।

मेरी माफी माँगती है अगर यह पहले से ही इसी तरह से पूछा गया है लेकिन मैं इसे खोजने में असमर्थ था - इस मामले में कृपया मुझे एक प्रासंगिक उत्तर की ओर इंगित करें।

+5

कुछ की तरह: 'all.data [% में all.data $ आईडी% एक दूसरे को काटना (pre.data $ आईडी , post.data $ आईडी),] '? – Arun

उत्तर

4

नोट: अरुण मुझ से थोड़ा पहले एक टिप्पणी में एक ही उत्तर पोस्ट।

आप इस तरह intersect उपयोग कर सकते हैं:

all.data[all.data$ID %in% intersect(pre.data$ID, post.data$ID),] 

कौन देता है:

ID Y Survey 
1 1 yes  1 
2 2 no  1 
3 3 no  1 
6 6 yes  1 
7 7 yes  1 
8 8 yes  1 
9 9 no  1 
10 10 yes  1 
11 1 no  2 
12 2 yes  2 
13 3 no  2 
14 6 no  2 
15 7 yes  2 
16 8 yes  2 
17 9 no  2 
18 10 yes  2 
+0

यह वही है जो मुझे चाहिए, धन्यवाद! – Froom2

3

plyr में शामिल होने के लिए देखो।

prepost.match.data <- join(pre.data, post.data, by = c("ID")) 
+0

यह क्षैतिज डेटा में शामिल होगा, जो कई अनुप्रयोगों में अधिक उपयोगी होगा। –

+0

हालांकि मैंने अन्य उत्तर को स्वीकार किए जाने के रूप में रखा है, यह भी अच्छी तरह से काम करता है - डेटा को व्यापक प्रारूप में छोड़कर, जो वास्तव में कई स्थानों पर उपयोगी होगा लेकिन मेरी विशिष्ट आवश्यकताओं के लिए नहीं। धन्यवाद! – Froom2

संबंधित मुद्दे