R - Как использовать dplyr left_join по индексу столбца? - PullRequest
0 голосов
/ 02 марта 2019

Как использовать индекс столбца для dplyr :: left_join (и вашей семьи)?

Пример (по именам столбцов):

    library(dplyr)
    data1 <- data.frame(var1 = c("a", "b", "c"), var2 = c("d", "d", "f")) 
    data2 = data.frame(alpha = c("d", "f"), beta = c(20, 30))
    left_join(data1, data2, by = c("var2" = "alpha"))

Однако, заменив by = c("var2" = "alpha")) на by = c(data1[,2] = data2[,1]) приводит к этой ошибке: "by должен быть (именованным) символьным вектором, списком или NULL для естественных объединений (не рекомендуется в производственном коде), не логично".

Мне нужно использовать "позиция столбца "для цикла на новых функциях.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Использование dplyr:

# rename_at changes alpha into var2 in data2
left_join(data1, rename_at(data2, 1, ~ names(data1)[2]), by = names(data1)[2])
# output
  var1 var2 beta
1    a    d   20
2    b    d   20
3    c    f   30

Использование базы R:

merge(data1, data2, by.x = 2, by.y = 1, all.x = T, all.y = F)
# output
  var2 var1 beta
1    d    a   20
2    d    b   20
3    f    c   30
0 голосов
/ 02 марта 2019

Я не знаю, как вы собираетесь использовать индекс столбца, но хакерское решение заключается в следующем:

#make a named vector for the by argument, see ?left_join
join_var <- names(data2)[1] #change index here based on data2
names(join_var) <- names(data1)[2] #change index here based on data1

left_join(data1, data2, by = join_var)

В зависимости от конечного результата, который вы хотите использовать с помощью индекса столбца, существуетвероятно, более подходящее решение, чем это.

...