Генерируя вектор разности между двумя векторами
У меня есть два файла 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)
Я хочу создать вектор, состоящий из элементов, принадлежащих только B.
Ответы
Ответ 1
Вы ищете функцию setdiff
setdiff(vectorB$id, vectorA$id)
Если вы не хотите, чтобы это уменьшалось до уникальных значений, вы могли бы создать функцию not in
(kudos to @joran здесь Соответствует отрицанию)
'%nin%' <- Negate('%in%')
vectorB$id[vectorB$id %nin% vectorA$id]
Ответ 2
Если ваш вектор вместо data.table
s, то все, что вам нужно, это пять символов:
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] И в версии 1.8.7 проще и быстрее прочитать файл:
A <- setkey(fread("vecA.csv"), id)
B <- setkey(fread("vecB.csv"), id)
B[!A]