39

2 つの csv ファイルがあり、それぞれが 1 列のデータで構成されています

たとえば、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 の場合、必要なのは 5 文字だけです。

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]

[マシュー] v1.8.7 では、ファイルの読み取りもよりシンプルで高速になりました。

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