匹配2个DF';s乘2列R
如果我有两个DF的值相同,但顺序不同,我可以创建第三个DF,第二个DF的值与第一个匹配吗 例:匹配2个DF';s乘2列R,r,R,如果我有两个DF的值相同,但顺序不同,我可以创建第三个DF,第二个DF的值与第一个匹配吗 例: HomeTeam我们可以使用match来获取排列行的索引 library(dplyr) df2 %>% arrange(match(HomeTeam, df1$HomeTeam), match(AwayTeam, df1$AwayTeam)) 此外,如果有更多的列,则最好粘贴这些列并进行单个匹配 library(stringr) df2 %>% arrange(ma
HomeTeam我们可以使用match
来获取排列
行的索引
library(dplyr)
df2 %>%
arrange(match(HomeTeam, df1$HomeTeam), match(AwayTeam, df1$AwayTeam))
此外,如果有更多的列,则最好粘贴这些列并进行单个匹配
library(stringr)
df2 %>%
arrange(match(str_c(HomeTeam, AwayTeam), str_c(df1$HomeTeam, df1$AwayTeam)))
注意:对于大型数据集,match
可能比join更快,因为我们正在从另一个数据集中提取一个列或向量以用于匹配
library(stringr)
df2 %>%
arrange(match(str_c(HomeTeam, AwayTeam), str_c(df1$HomeTeam, df1$AwayTeam)))
或者另一个选项是data.table
join,这也会很快
library(data.table)
setDT(df2)[setDT(df1), on = .(HomeTeam, AwayTeam)]
# HomeTeam AwayTeam
#1: Liverpool Burnley
#2: Southampton Brighton
#3: Arsenal Man United
#4: Everton Tottenham
#5: Chelsea Man City
我们可以使用df2
左连接
/内连接
df1
,以与df1
相同的顺序获得df2
数据
dplyr::left_join(df1, df2, by = c("HomeTeam", "AwayTeam"))
# A tibble: 5 x 2
# HomeTeam AwayTeam
# <chr> <chr>
#1 Liverpool Burnley
#2 Southampton Brighton
#3 Arsenal Man United
#4 Everton Tottenham
#5 Chelsea Man City
dplyr::left_join(df1,df2,by=c(“HomeTeam”,“AwayTeam”))
#一个tibble:5x2
#阿瓦泰姆主队
#
#1利物浦伯恩利
#南安普敦布莱顿2号
#3阿森纳人联队
#4埃弗顿托特纳姆
#5切尔西曼城
df3和df1看起来一样。所以,在这种情况下,您不需要df2%>%安排(match(HomeTeam,df1$HomeTeam),match(AwayTeam,df1$AwayTeam))
@Akrun-谢谢,我会试试的。在这两个DF中还有更多的列(虽然它们有不同的名称),但我会看看是否可以匹配它们。如果我需要额外的帮助,我会编辑我的开场白。谢谢,非常感谢。第二种选择效果很好。我对这一点还很陌生,所以无论谁否决了你,我都会向他道歉。我再次投票,谢谢这帮我把我的数据整理了十倍。@ScoutingForJay它不是针对你的。没关系。谢谢