2012-12-19 2 views
1

Уважаемые эксперты StackOverflow,sqldf выбрать значения из другой таблицы

У меня есть две таблицы

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

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

+0

Похоже, вы ищете какой-то присоединиться. В help для sqldf есть много примеров. – mnel

ответ

1

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

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

Что здесь происходит, что sapply оператор возвращает логический список, указывающий, какие элементы table1 находятся в первой колонке table2 «s. Мы тогда с помощью этого логического вектора индекса 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]) 
1

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

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

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

table1[table1 == table2[,1]] 

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

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

Очень приятный пробой –

3

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

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

Или вы могли бы использовать merge

merged <- merge(table1, table2, by = 'column1') 
+0

Хотя я считаю, что слияние будет INNER JOIN, если вы не указали 'all.x = TRUE'. –

+0

Очень верно, добавлено. – mnel

+0

Спасибо за помощь. – Francisco

Смежные вопросы