2013-02-19 13 views
30

मैं दो csv फ़ाइलें है, और जिनमें से प्रत्येक डेटादो वैक्टर

उदाहरण के लिए में से एक स्तंभ के होते हैं के बीच अंतर का एक वेक्टर पैदा करने, vecA.csv तरह

id 
1 
2 

vecB.csv है जैसे

id 
3 
2 

इस प्रकार मैं डेटा सेट पढ़ें:

vectorA<-read.table("vecA.csv",sep=",",header=T) 
vectorB<-read.table("vecB.csv",sep=",",header=T) 

मैं केवल बी से संबंधित तत्वों वाला एक वेक्टर उत्पन्न करना चाहता हूं।

उत्तर

61

आप समारोह के लिए देख रहे setdiff

setdiff(vectorB$id, vectorA$id) 

आप इस अनन्य मानों करने के लिए कम नहीं करना चाहता था, तो आप एक not in समारोह

(प्रशंसा @joran करने के लिए यहाँ Match with negation)

बना सकते हैं
'%nin%' <- Negate('%in%') 

vectorB$id[vectorB$id %nin% vectorA$id] 
+4

+1। मैं '! (X% में x%) का उपयोग करता हूं। –

+2

+11 के लिए 'नकारात्मक ('%% '' '' !!! –

+0

बेशक @ जोरेन से;) लेकिन संदर्भ के लिए –

9

यदि आपके वेक्टर data.table एस हैं, तो आपको केवल पांच वर्ण हैं:

B[!A] 

library(data.table) 

# read in your data, wrap in data.table(..., key="id") 
A <- data.table(read.table("vecA.csv",sep=",",header=T), key="id") 
B <- data.table(read.table("vecB.csv",sep=",",header=T), key="id") 

# Then this is all you need 
B[!A] 

[मैथ्यू] और v1.8.7 में यह रूप में अच्छी तरह फ़ाइल को पढ़ने के लिए सरल और तेज है: `Negate` इसके लिए

A <- setkey(fread("vecA.csv"), id) 
B <- setkey(fread("vecB.csv"), id) 
B[!A] 
+4

बहुत चालाक। डेटाटेबल चट्टानों! और यह तेज तेज है। – N8TRO

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