如何通过匹配R中的一列或另一列从另一个数据帧添加列?
我试图通过匹配一列或另一列的值,将数据帧的一列中的值添加到另一个数据帧中 例如: 我有两个不同长度的df,df2没有df1中列出的所有对: df1 df2 我想要这个:如何通过匹配R中的一列或另一列从另一个数据帧添加列?,r,dataframe,R,Dataframe,我试图通过匹配一列或另一列的值,将数据帧的一列中的值添加到另一个数据帧中 例如: 我有两个不同长度的df,df2没有df1中列出的所有对: df1 df2 我想要这个: Year Territory Pair_ID type 1 1999 BGD 1 5 PO 2 2000 TAR 6 2 SB 3 2001 JAM 3 7 PO
Year Territory Pair_ID type
1 1999 BGD 1 5 PO
2 2000 TAR 6 2 SB
3 2001 JAM 3 7 PO
4 2002 TER 9 2 N/A
我不想完全合并这两个数据帧。我只想通过将df1中的“Pair”列与df2中的“Pair”列或“pair1”列匹配,将“type”列从df2添加到df1。我还想用“N/A”来填充在df2中找不到的对
我找不到任何解决这个具体问题的方法
我试过这个:
df1$type <- df2$type[match(df1$Pairs, c(df2$pair,df2$pair1))]
df1$type尝试以下操作
typeA <- df2$type[match(df1$Pairs, df2$pair)]
typeB <- df2$type[match(df1$Pairs, df2$pair1)]
df1$type <- ifelse(is.na(typeA), typeB, typeA)
typeA试试下面的方法
typeA <- df2$type[match(df1$Pairs, df2$pair)]
typeB <- df2$type[match(df1$Pairs, df2$pair1)]
df1$type <- ifelse(is.na(typeA), typeB, typeA)
typeA对于sqldf来说是一个很好的例子:
library(sqldf)
sqldf("select df1.Year
,df1.Territory
,df1.Pair_ID
,df2.type
from df1
left join df2
on df1.Pair_ID = df2.pair
or df1.Pair_ID = df2.pair1
")
结果
年份地域对\u ID类型
1 1999 BGD 1 5 PO
2000焦油6 2锑
3 2001 JAM 3 7 PO
4 2002年之三9 2
sqldf的好例子:
library(sqldf)
sqldf("select df1.Year
,df1.Territory
,df1.Pair_ID
,df2.type
from df1
left join df2
on df1.Pair_ID = df2.pair
or df1.Pair_ID = df2.pair1
")
结果
年份地域对\u ID类型
1 1999 BGD 1 5 PO
2000焦油6 2锑
3 2001 JAM 3 7 PO
4 2002年之三9 2
在第二个数据框中df2
列出了8列数据,但只提供了6列名称。@Tim Biegeleisen还有6列数据。例如,在第1行中,如果我理解正确,值“15”位于df1
中的“pair”下,值“51”位于“pair1”下,您可以使用列名Pair\u ID
来避免混淆。在第二个数据框df2
中,您列出了8列数据,但只提供了6列名称。@Tim Biegeleisen还有6列数据。例如,在第1行中,值“15”位于df1
中的“pair1”下,值“51”位于“pair1”下,如果我理解正确,您可以使用列名pair\ID
来避免混淆。
Year Territory Pair_ID type
1 1999 BGD 1 5 PO
2 2000 TAR 6 2 SB
3 2001 JAM 3 7 PO
4 2002 TER 9 2 <NA>