2015-10-14 73 views
0

我有兩個數據集。一個只有一個註冊號碼(A),另一個有一個註冊號碼列表和註冊號碼旁邊的型號(B)。操縱兩個具有公共字段的數據幀

一個

一個

ircraft.reg.num Action Description Service.Type C/O Order.Type Created.on Actual.release.date 
5Y-BX Re-Assembling of Aircraft   C/O ZS08 40512 40532 
5Y-BX Re-Assembling of Aircraft   C/O ZS08 40512 40532 
5Y-BX Re-Assembling of Aircraft   C/O ZS08 40512 40532 
5Y-BX  Dual Control Collective Lever   ZS08 40497 40550 
5Y-BX  Dual Control Collective Lever   ZS08 40497 40550 
5Y-BX Perform SB 63-10 MGB plug   ZS08 40548 40550 
5Y-BX Perform SB 63-10 MGB plug   ZS08 40548 40550 
5Y-BX Defect Pitot static cover burnt   ZS08 40497 40550 
5Y-CD Airworthiness Inspection & Test    ZS08 40711 40711 
5Y-CD Airworthiness Inspection & Test    ZS08 40711 40711 
5Y-CD Airworthiness Inspection & Test    ZS08 40711 40711 

Reg. Aircraft.Model 
5O-MV AS 355 
5O-Unknown SA 318 
5O-Unknown SA 318 
5T-Unlnown SA 318 
5T-BF BO 105 
5T-BW AS 350 
5T-BX AS 350 
5T-BY AS 350 
5T-CA BK 117 
5T-CC AS 350 
5T-CD AS 350 
5T-DK AS 350 
5T-DS AS 350 
5T-DS AS 350 

我想知道,如果在一個登記號等於B中的登記號,是什麼型號的類型?

我目前使用的:

if(A$Aircraft.reg.num -> B$Reg.){ 
model <- reg.no$Aircraft.Model 
} 

但它不工作,因爲我data.frames甚至不長。

有關如何在不使用「if」函數的情況下獲得結果的任何建議?

感謝, 卡門

+1

你可能需要'合併'而不是if語句 – Cath

+1

這是一個** [可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible -例)**。使用'dput()'轉儲數據幀,以便我們實際編寫代碼。 – smci

回答

0

您可以使用plyr包加入功能使用是在Excel中的一種VLOOKUP的。

library(plyr) 
newdf <- join(A,B[,1], by = "aircraft.reg.num", type = "left join") 

上面的代碼應該給你相同的ID號碼,如果它存在,NA如果不是。您可以在下面的鏈接中找到更多相似的問題。

How to do vlookup and fill down (like in Excel) in R?

0

也可以使用sqldf包。它允許在數據框上進行SQL風格的查詢。

library(sqldf) 
df <- sqldf('SELECT A."aircraft.reg.num", B."Aircraft.Model" 
       FROM A INNER JOIN B ON A."aircraft.reg.num" = B."Reg."') 

你也可以使用LEFT JOIN如果你想看到哪些飛機登記中缺少B.

注:含一段列名必須與包圍「...」或[ ...],因爲時期是一個SQL運算符。

+0

@ G.Grothendieck,謝謝。應該知道這一點。我經常使用它 – amwill04