1

スタックオーバーフローの専門家の皆様、

私は2つのテーブルを持っています

table1<-read.table("table1.txt",header=TRUE)
table2<-read.table("table2.txt",header=TRUE)

表1から、表2の最初の列の値と一致するすべての値を選択したいと思います。sqldfを試しましたが、構文がわかりません。

selection<-sqldf("SELECT *, column1 from table1 WHERE column1 like column2 from table2")

なにか提案を?

4

3 に答える 3

3

左の結合はあなたが求めているものです。

 selection <- sqldf('select * from table1 LEFT JOIN table2 ON table1.column1 = table2.column1')

またはあなたは使用することができますmerge

merged <- merge(table1, table2, by = 'column1')
于 2012-12-19T00:37:56.217 に答える
1

次のことを試すことができます。

 table1[sapply(table1, function(x) x %in% table2[, 1, drop=FALSE])]

ここで何が起こるかというと、ステートメントはの最初の列にsapplyある要素を示す論理リストを返します。次に、その論理ベクトルを使用してインデックスを作成しますtable1table2table1

  # to see this more clearly, try the following line, 
  # which is what is being used to index table1
  sapply(table1, function(x) x %in% table2[, 1, drop=FALSE])
于 2012-12-19T00:21:16.247 に答える
1

sqldfなしtable1の最初の列の値と一致するすべての値を選択するソリューションは次のとおりです。table2

table1[table1 %in% table2[,1]]

これがあなたの意図したものかどうかはわかりませんが、これはあなたの質問が私に示唆していることです。の対応する行table1値と一致する値を選択する場合は、を使用します。table2

table1[table1 == table2[,1]]

からの単一の列を検討したいだけの場合はtable1、次のようなものを使用します

table1[table1[,1] %in% table2[,1], 1]
于 2012-12-19T00:35:58.037 に答える