Почему left_join() перезаписывает существующие столбцы?

#r #dplyr #left-join

#r #dplyr #соединение по левому краю

Вопрос:

Я пытаюсь добавить два дополнительных столбца во фрейм данных, чтобы создать список границ для сетевого анализа, используя left_join() .

left_join() Сработало создание первого, где был создан новый столбец и переименован в from :

 edges <- per_blinds %>% 
  left_join(nodes, by =c("occupant" = "label")) %>% 
  rename(from = id)

#output
# A tibble: 17 x 4
   occupant blind.no weight  from
   <chr>    <chr>     <int> <int>
 1 10       10            1     5
 2 10       11            1     5
 3 10       12            1     5
 4 10       8             1     5
 5 10       9             1     5
 6 14       10            2     3
 7 14       11            2     3
 8 14       12            2     3
 9 14       8             1     3
10 14       9             1     3
11 15       6             3     1
12 15       7             3     1
13 15       8             1     1
14 19       15            3     2
15 19       16            2     2
16 22       16            2     4
17 22       17            2     4
 

Однако второй left_join() создал новый столбец, вызвал to , но from одновременно перезаписал столбец:

 edges <- per_blinds %>% 
  left_join(nodes, by =c("blind.no" = "label")) %>% 
  rename(to = id)

#output
# A tibble: 17 x 4
   occupant blind.no weight    to
   <chr>    <chr>     <int> <int>
 1 10       10            1     5
 2 10       11            1    NA
 3 10       12            1    NA
 4 10       8             1    NA
 5 10       9             1    NA
 6 14       10            2     5
 7 14       11            2    NA
 8 14       12            2    NA
 9 14       8             1    NA
10 14       9             1    NA
11 15       6             3    NA
12 15       7             3    NA
13 15       8             1    NA
14 19       15            3     1
15 19       16            2    NA
16 22       16            2    NA
17 22       17            2    NA

 

Любое разъяснение было бы здорово. Код для фреймов данных:

 #the data frame to add new columns onto 
structure(list(occupant = c("10", "10", "10", "10", "10", "14", 
"14", "14", "14", "14", "15", "15", "15", "19", "19", "22", "22"
), blind.no = c("10", "11", "12", "8", "9", "10", "11", "12", 
"8", "9", "6", "7", "8", "15", "16", "16", "17"), weight = c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 3L, 3L, 1L, 3L, 2L, 2L, 2L
)), row.names = c(NA, -17L), class = c("tbl_df", "tbl", "data.frame"
))

#the node to create the new columns 
structure(list(id = 1:15, label = c("15", "19", "14", "22", "10", 
"Blind  7", "Blind  6", "Blind  15", "Blind  16", "Blind  12", 
"Blind  11", "Blind  10", "Blind  9", "Blind  8", "Blind  17"
)), row.names = c(NA, -15L), groups = structure(list(label = c("10", 
"14", "15", "19", "22", "Blind  10", "Blind  11", "Blind  12", 
"Blind  15", "Blind  16", "Blind  17", "Blind  6", "Blind  7", 
"Blind  8", "Blind  9"), .rows = structure(list(5L, 3L, 1L, 2L, 
    4L, 12L, 11L, 10L, 8L, 9L, 15L, 7L, 6L, 14L, 13L), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), row.names = c(NA, 15L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))



 

Комментарии:

1. какие из них являются данными ‘per_blinds’ в dput

2. Извините, первый — ‘per_blinds’

3. Используйте «ребра» во втором left_join, а не «узлы», и все должно быть хорошо!

4. Оооо!!!!!! Такой простой оверсайт!