生成两个向量之间的差向量

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。
2个回答

81

您正在寻找函数setdiff

setdiff(vectorB$id, vectorA$id)

如果您不想将其缩减为唯一值,则可以创建一个 not in 函数。

(感谢 @joran 在这里的贡献 Match with negation)

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

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

+111 对于 %nin% !! 我想我已经有一些用途了。 - N8TRO
在Frank Harrell的Hmisc包中,有%nin%。 - swihart
如果a和b是向量,则a[!a %in% b] - Cybernetic

13
如果你的向量是 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]

[Matthew] 在v1.8.7中,读取文件更加简单和快速:
A <- setkey(fread("vecA.csv"), id)
B <- setkey(fread("vecB.csv"), id)
B[!A]

4
非常流畅。data.table非常出色!而且速度非常快。 - N8TRO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接