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

use*_*099 39 r

我有两个csv文件,每个文件由一列数据组成

例如,vecA.csv就像

id
1
2
Run Code Online (Sandbox Code Playgroud)

vecB.csv就像

id
3
2
Run Code Online (Sandbox Code Playgroud)

我读了数据集如下:

vectorA<-read.table("vecA.csv",sep=",",header=T)
vectorB<-read.table("vecB.csv",sep=",",header=T)
Run Code Online (Sandbox Code Playgroud)

我想生成一个由属于B的元素组成的向量.

mne*_*nel 80

您正在寻找这个功能 setdiff

setdiff(vectorB$id, vectorA$id)
Run Code Online (Sandbox Code Playgroud)

如果您不希望将此缩减为唯一值,则可以创建一个not in函数

(感谢@joran在这里与否定相匹配)

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

vectorB$id[vectorB$id %nin% vectorA$id]
Run Code Online (Sandbox Code Playgroud)

  • 添加"否定"为+1.我使用`!(%y中的x%)`. (6认同)

Ric*_*rta 12

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

B[!A]
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)

[Matthew]在v1.8.7中,读取文件也更简单快捷:

A <- setkey(fread("vecA.csv"), id)
B <- setkey(fread("vecB.csv"), id)
B[!A]
Run Code Online (Sandbox Code Playgroud)

  • 非常光滑.data.table岩石!它的速度非常快. (4认同)