Das Problem hierbei ist, dass Sie einen benannten Vektor zu liefern, wenn die gemeinsame Spalte unterschiedliche Namen hat in den data.frames. Sehen Sie, was in Ihrem Beispiel passiert:
Es funktioniert, wenn Sie die Namen direkt beliefern:
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
Und der genannten Vektor Sie liefern ist:
c("x1" = "x2")
# x1
#"x2"
Nun, wenn Sie Zeichenvektoren verwenden, die Vektor namens Änderungen an:
var1 = "x1"
var2 = "x2"
c(var1 = var2)
#var1 # <~~ this is why it doesn't work
#"x2"
ich weiß nicht, ob es eine „saubere“ Art und Weise, dies zu lösen in DPLY momentan. Eine Abhilfe ist die folgende zwicken den benannten Vektor zu konstruieren, wie erforderlich:
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
Das funktioniert, weil:
setNames(var2, var1)
# x1
#"x2"
Hoffe, es hilft.
Hinweis: Sie könnten das gleiche tun mit names<-
wie so:
df1 %>% left_join(df2, by = `names<-`(var2, var1))
aber Hadley empfiehlt stattdessen den setNames
Ansatz.
Bitte verwenden Sie nicht die 'Namen <-' Gemeinheit -' setNames() 'ist viel besser – hadley
Ich habe meine Antwort bearbeitet, um das zu reflektieren. –