user785099
user785099

Reputation: 5553

generating a vector of difference between two vectors

I have two csv files, and each of which consists of one column of data

For instance, vecA.csv is like

id
1
2

vecB.csv is like

id
3
2

I read the data set as follows:

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

I want to generate a vector consisting of elements belonging to B only.

Upvotes: 39

Views: 45678

Answers (2)

Ricardo Saporta
Ricardo Saporta

Reputation: 55340

If your vector's are instead data.tables, then all you need are five characters:

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]

[Matthew] And in v1.8.7 it's simpler and faster to read the file as well :

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

Upvotes: 13

mnel
mnel

Reputation: 115382

You are looking for the function setdiff

setdiff(vectorB$id, vectorA$id)

If you did not want this reduced to unique values, you could create a not in function

(kudos to @joran here Match with negation)

'%nin%' <- Negate('%in%')

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

Upvotes: 81

Related Questions