如何匹配1列到2列?

时间:2013-02-02 18:47:22

标签: r

我正在尝试将一列中的数字与另外两列中的数字相匹配。当匹配到只有一列时,我可以做到这一点,但有问题扩展到两列。这就是我在做的事情:

我有2个数据帧,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”与df2中的“number_a”或“number_b”匹配,然后将df2中的“value”插入到df1的“value”中,将结果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

但是,我似乎无法使用这种方法填写df1中的所有“值”列。如何一举将“数字”与“number_a”和“number_b”匹配。我试过了

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

但这没效果。

谢谢!

2 个答案:

答案 0 :(得分:2)

更简单的解决方案:

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

如果你不熟悉ifelse,它适用于以下形式的向量:

ifelse(Condition, ValueIfTrue, ValueIfFalse)

答案 1 :(得分: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