假设以下数据框:
df <- (data.frame(ID = c("1", "2", "3"),
Drink = c("Cola", "Pepsi", "Fanta")))
输出:
ID Drink
1 1 Cola
2 2 Pepsi
3 3 Fanta
然后我有另一个看起来像这样的数据框:
df2 <- (data.frame(Drink = c("Cola", "Fanta", "Cola", "Pepsi", "Pepsi")))
Drink
1 Cola
2 Fanta
3 Cola
4 Pepsi
5 Pepsi
我想在此数据框中创建一个额外的列,其中包含与行中指定的饮料相对应的ID(基于第一个数据框(df)中的ID)。结果如下:
ID Drink
1 1 Cola
2 3 Fanta
3 1 Cola
4 2 Pepsi
5 2 Pepsi
答案 0 :(得分:2)
只使用基准R,您可以执行以下操作
请注意,为了获得df2
的原始订单,您需要订购df2$Drink
,然后反转该流程。
inx <- order(df2$Drink)
merge(df, df2)[order(inx), 2:1]
# ID Drink
#1 1 Cola
#3 3 Fanta
#2 1 Cola
#4 2 Pepsi
#5 2 Pepsi
答案 1 :(得分:1)
您可以从left_join
尝试inner_join
或dplyr
。
library(dplyr)
df2 %>% left_join(df, by="Drink")
# Drink ID
# 1 Cola 1
# 2 Fanta 3
# 3 Cola 1
# 4 Pepsi 2
# 5 Pepsi 2