sqldf выбрать значения из другой таблицы

Уважаемые эксперты stackoverflow,

у меня две таблицы

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")

Любое предложение?


person Francisco    schedule 19.12.2012    source источник
comment
Похоже, вы ищете какое-то соединение. В справке для sqldf есть много примеров.   -  person mnel    schedule 19.12.2012


Ответы (3)


Вы можете попробовать следующее:

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

Здесь происходит то, что оператор sapply возвращает логический список, указывающий, какие элементы table1 находятся в первом столбце table2. Затем мы используем этот логический вектор для индексации table1

  # 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])
person Ricardo Saporta    schedule 19.12.2012

Левое соединение - это то, что вам нужно.

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

Или вы можете использовать merge

merged <- merge(table1, table2, by = 'column1')
person mnel    schedule 19.12.2012
comment
Хотя я считаю, что слияние будет ВНУТРЕННИМ СОЕДИНЕНИЕМ, если вы не укажете all.x=TRUE. - person IRTFM; 19.12.2012
comment
Спасибо за помощь mnel! - person Francisco; 19.12.2012

Вот решение для выбора всех значений из table1, которые соответствуют значениям из первого столбца table2 без sqldf:

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

Я не уверен, что это то, что вы имели в виду, но это то, что ваш вопрос подразумевает для меня. Если вы хотите выбрать значения из table1, которые соответствуют значениям соответствующей строки из table2, используйте

table1[table1 == table2[,1]]

Если вы просто хотите рассмотреть один столбец из table1, используйте что-то вроде

table1[table1[,1] %in% table2[,1], 1]
person QkuCeHBH    schedule 19.12.2012