R:* _join(dplyr)的标准评估
发布时间:2020-12-12 08:23:03 所属栏目:MsSql教程 来源:网络整理
导读:如何使用* _join()从dplyr中连接2个表,当连接变量名称不同并存储在另一个变量中时? 例如 df1 = data_frame(x1 = 1:10,y1 = 21:30)df2 = data_frame(x2 = 6:15,y2 = 26:35)df3 = data_frame(x1 = 6:15,y2 = 26:35)var1 = "x1"var2 = "x2"df1 %% left_join(df3
如何使用* _join()从dplyr中连接2个表,当连接变量名称不同并存储在另一个变量中时?
例如 df1 = data_frame(x1 = 1:10,y1 = 21:30) df2 = data_frame(x2 = 6:15,y2 = 26:35) df3 = data_frame(x1 = 6:15,y2 = 26:35) var1 = "x1" var2 = "x2" df1 %>% left_join(df3,by=c(var1)) # #1 works 但这会给出错误 – df1 %>% left_join(df2,by=c(var1 = var2)) # #2 doesn't work Error: cannot join on columns 'x2' x 'var1': index out of bounds 令人惊讶的是, df1 %>% left_join(df2,by=c("x1" = var2)) # #3 works 解决方法这里的问题是,如果公用列在data.frames中具有不同的名称,则必须提供一个命名矢量.看看你的例子会发生什么:当您直接提供名称时,它可以工作: df1 %>% left_join(df2,by = c("x1" = "x2")) #Source: local data frame [10 x 3] # # x1 y1 y2 #1 1 21 NA #2 2 22 NA #3 3 23 NA #4 4 24 NA #5 5 25 NA #6 6 26 26 #7 7 27 27 #8 8 28 28 #9 9 29 29 #10 10 30 30 您提供的命名矢量是: c("x1" = "x2") # x1 #"x2" 现在,如果您使用字符向量,则命名向量将更改为: var1 = "x1" var2 = "x2" c(var1 = var2) #var1 # <~~ this is why it doesn't work #"x2" 目前我不知道是否有一个“干净”的方式来解决这个问题.解决方法是根据需要进行以下调整以构造命名向量: df1 %>% left_join(df2,by = setNames(var2,var1)) #Source: local data frame [10 x 3] # # x1 y1 y2 #1 1 21 NA #2 2 22 NA #3 3 23 NA #4 4 24 NA #5 5 25 NA #6 6 26 26 #7 7 27 27 #8 8 28 28 #9 9 29 29 #10 10 30 30 这是因为: setNames(var2,var1) # x1 #"x2" 希望它有帮助. 注意:您可以使用名称< - 像这样做一样: df1 %>% left_join(df2,by = `names<-`(var2,var1)) 但是Hadley建议使用setNames方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |