#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. Оооо!!!!!! Такой простой оверсайт!