3

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

我有 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”与“number_a”和“number_b”匹配。我试过了

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

但这没有用。

谢谢!

4

2 回答 2

2

更简单的解决方案:

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

如果您不熟悉 ifelse,它可以使用以下形式的向量:

ifelse(Condition, ValueIfTrue, ValueIfFalse)
于 2013-02-02T18:56:19.987 回答
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")
  数值
       1 5
       2 4
       3 3
       4 2
       5 1
于 2013-02-02T21:49:33.663 回答