39

我有两个 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 的元素组成的向量。

4

2 回答 2

81

您正在寻找功能setdiff

setdiff(vectorB$id, vectorA$id)

如果您不希望将其简化为唯一值,则可以创建一个not in函数

(在这里向@joran 致敬与否定匹配

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

vectorB$id[vectorB$id %nin% vectorA$id]
于 2013-02-19T04:15:58.097 回答
13

如果您的向量是data.tables,那么您只需要五个字符:

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] 在 v1.8.7 中,读取文件也更加简单快捷:

A <- setkey(fread("vecA.csv"), id)
B <- setkey(fread("vecB.csv"), id)
B[!A]
于 2013-02-19T07:36:54.520 回答