2013-02-02 43 views
3

我試圖將一列中的數字與另外兩列中的數字進行匹配。當匹配到單個列時,我可以很好地完成此任務,但遇到擴展到兩列的問題。下面是我在做什麼:如何匹配1列到2列?

我有2個dataframes,DF1:

number value 
1 
2 
3 
4 
5 

和DF2:

number_a number_b value 
3      3 
      1   5 
5      1 
      4   2 
      2   4 

我想要做的就是從DF1要麼匹配列 「數」 「NUMBER_A」 或number_b 「從DF2成 」」在DF2,然後插入「 值DF1的值」,而得到的結果作爲DF1:

number value 
1   5 
2   4 
3   3 
4   2 
5   1 

我的方法是使用

df1$value <- df2$value[match(df1$number, df2$number_a)] 

df1$value <- df2$value[match(df1$number, df2$number_b)] 

其產生,分別爲DF1

number value 
1   NA 
2   NA 
3   3 
4   NA 
5   1 

number value 
1   5 
2   4 
3   NA 
4   2 
5   NA 

不過,我似乎無法填寫所有的「價值」欄i n df1使用這種方法。我怎樣才能一舉將「數字」與「number_a」和「number_b」相匹配。我試過

df1$value <- df2$value[match(df1$number, df2$number_a:number_b)] 

但是沒有奏效。

謝謝!

回答

2

簡單的解決方案:

df2$number <- ifelse(is.na(df2$number_a), df2$number_b, df2$number_a) 

如果你不熟悉ifelse,它與載體的作品形式:

ifelse(Condition, ValueIfTrue, ValueIfFalse) 
+0

您好!非常感謝你的幫助。正如你所看到的,我對R很新,而且我對ifelse不是很熟悉。我嘗試了你的解決方案,但它將所有3的「數字」列添加到df2,這不是我正在尋找的。我剛剛意識到我沒有在我的初始文章中顯示我想要的結果,所以現在我將編輯它。再次感謝你的幫助。 – Thomas

+0

在我看來,它應該將列「number_a」和「number_b」合併到df2中的單個「編號」列中,然後可以與我上面的原始解決方案一起使用,但是對於我來說它不起作用,並給出「數字「所有3的列。不過,我似乎無法在這裏張貼表格。 – Thomas

+0

對不起,我意識到'is.null'沒有矢量化。我編輯了我的解決方案,讓我知道它是否有效。如果沒有,請告訴我你自己運行'df2 $ number_a'時得到的結果。 –

1

我是新手與R從數年(即將C)。是想出來的建議,我想我會粘貼什麼,我想出了:

// Assuming either 'number_a' or 'number_b' is valid 
// Combine into new column 'number' and delete them original columns 

df2 <- transform(df2, number = ifelse(is.na(df2$number_a), df2$number_b, 
     df2$number_a))[-c(1:2)] 

// Combine the two data frames by the column 'number' 
df <- merge(df1, df2, by = "number") 
 
    number value 
     1  5 
     2  4 
     3  3 
     4  2 
     5  1