2013-07-15 47 views
0

我有一個小問題,像這樣的兩個數據幀:第一資訊幀使從兩個數據從不同的數據幀中的兩個變量和表示其他變量之間的匹配幀

 Num.Op  Bonus 
    381942  Y 
    382181  Z 
    382260  A 
    382266  A 

和第二數據幀:

Num.Op1  Site 
    381942 Ecua Auto S.A. 
    382181 Vallejo Araujo S.A. 
    382260 Automotores de la Sierra 
    382266 Automotores de la Sierra 
    382310 Vallejo Araujo S.A. 
    382619 Vallejo Araujo S.A. 

我想創建一個新的數據幀,其中,使從數據幀中的一個可變Num.Op和從第二數據幀中的可變Num.Op1之間的比較之後,我顯示兩個變量:第一是Num.Op1來回第二個數據幀,第二個是v1,v1如果來自Num.Op的元素在Num.Op1中的值將爲1,如果不是,則爲0,並且對於所有具有1的情況也應該顯示變量sitebonus。這樣的事情:

Num.Op1 v1 Site      Bonus 
    381942 1 Ecua Auto S.A.    Y 
    382181 1 Vallejo Araujo S.A.   Z 
    382260 1 Automotores de la Sierra  A 
    382266 1 Automotores de la Sierra  A 
    382310 0 NA       NA 
    382619 0 NA       NA 

我證明與比賽,但我沒有得到結果。

+3

嘗試'merge()'.. –

+0

'merge' with all.y = TRUE –

+0

此外,我們無法輕鬆讀取數據。請使用dput提供數據。 –

回答

0

您想使用merge函數。

首先,你的第一個數據幀創建新列「V1」,並用「1」填滿它:

df1$v1 <- 1 

然後通過合併創建一個新的data.frame您2原始數據幀一起:

mergedDF <- merge(df1, df2, by=1, all.y=TRUE) 

最後,分配 '0' 在V1列中的值的已經不是 '1':

mergedDF$v1[is.na(mergedDF$v1)] <- 0 

mergedDF現在應該包含你想要的。

0
# input data 
df1 = read.table(text = ' Num.Op  Bonus 
381942  Y 
382181  Z 
382260  A 
382266  A', header = T) 
df2 = read.table(text = ' Num.Op1  Site 
    381942 "Ecua Auto S.A." 
    382181 "Vallejo Araujo S.A." 
    382260 "Automotores de la Sierra" 
    382266 "Automotores de la Sierra" 
    382310 "Vallejo Araujo S.A." 
    382619 "Vallejo Araujo S.A."', header = T) 

# load data.table, convert to data.table and set keys for merging 
library(data.table) 
dt1 = data.table(df1, key = "Num.Op") 
dt2 = data.table(df2, key = "Num.Op1") 

# the merge - add a v1 column to dt1, merge with dt2, whenever the merge fails, 
# i.e. v1 is NA, set v1 to 0 and Site to NA (Bonus will be set to NA automatically) 
result = dt1[, v1 := 1][dt2][is.na(v1), `:=`(v1 = 0, Site = NA_character_)] 
result 
# Num.Op Bonus v1      Site 
#1: 381942  Y 1   Ecua Auto S.A. 
#2: 382181  Z 1  Vallejo Araujo S.A. 
#3: 382260  A 1 Automotores de la Sierra 
#4: 382266  A 1 Automotores de la Sierra 
#5: 382310 NA 0      NA 
#6: 382619 NA 0      NA 
相關問題