#r #dplyr #grouping
#r #dplyr #группировка
Вопрос:
У меня есть фрейм данных с двумя столбцами id_1 и id_2. Для каждого из id_1 я хочу подсчитать количество совпадений, которые он имеет со всеми элементами id_2.
Я полагаю, что результатом является фрейм данных со столбцами id_1, id_2 и number_of_id_2_found_for_id_1.
Вот что я пытаюсь
set.seed(1)
df <- data.frame(
id_1 = sample(1:10, size = 30, replace = TRUE),
id_2 = sample(1:10, size = 30, replace = TRUE)
)
df %>% group_by(id_1, id_2) %>%
# id_1 should be unique
summarise(~n(.x)) # I want this to be the number of id_2 it has found for each of the elements of id_1
Мой ожидаемый результат будет:
1 1 0
1 2 0
1 3 0
1 4 1
1 5 0
….
1 9 0
2 1 0
…
2 7 1
2 8 0
2 9 1
И так далее, в основном для каждого id_1 количество элементов, которые он нашел для each_id_2. В приведенном выше примере это в основном 1, но в гораздо большем фрейме данных количество увеличится. Это похоже на двудольный граф, где ребром будет количество совпадений слева направо между первым компонентом — id_1 и id_2.
Заранее спасибо!
Комментарии:
1. Извините, опечатка. Исправил это только сейчас.
2. Из начального числа, о котором вы упомянули, я получаю строку для
1 3
Ответ №1:
Основываясь на обновленном сообщении, может быть, нам нужно сделать a crossing
, чтобы вернуть все комбинации, выполнить a count
для исходного набора данных для обоих столбцов и объединить с полной комбинацией
library(dplyr)
library(tidyr)
crossing(id_1 = 1:10, id_2 = 1:10) %>%
left_join(., df %>%
count(id_1, id_2)) %>%
mutate(n = replace_na(n, 0))
-вывод
# A tibble: 100 x 3
# id_1 id_2 n
# <int> <int> <dbl>
# 1 1 1 0
# 2 1 2 0
# 3 1 3 1
# 4 1 4 1
# 5 1 5 0
# 6 1 6 0
# 7 1 7 0
# 8 1 8 0
# 9 1 9 1
#10 1 10 0
# … with 90 more rows
Комментарии:
1. Я действительно хочу посмотреть, что это за элемент, то есть фрейм данных id_1, id_2, number_of_id_2_found_for_id_1
2. Это дает фрейм данных с двумя столбцами, мне нужен фрейм данных с 3 столбцами — уникальным id_1, id_2 и количеством совпадений id_2 для этого id_1.
3. Я добавил редактирование с тем, как я представляю себе конечный результат
4. @Nikola Спасибо, я этого не заметил. Пожалуйста, укажите, когда вы его редактируете. Спасибо
5. @Nikola я добавил решение. Без полного ожидаемого результата я просто предполагаю, что это может быть тот результат, который вы хотели