2012-12-19 90 views
1

親愛的計算器專家,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

您似乎在尋找某種加盟。 'sqldf'的幫助中有很多例子。 – mnel

回答

1

你可以嘗試以下方法:

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