我正在尝试将一列中的数字与另外两列中的数字相匹配。当匹配到只有一列时,我可以做到这一点,但有问题扩展到两列。这就是我在做的事情:
我有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)]
但这没效果。
谢谢!
答案 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