Подтвердить что ты не робот

Генерируя вектор разности между двумя векторами

У меня есть два файла 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.

4b9b3361

Ответ 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]