Мне нужно добавить отсутствующие комбинации переменных в группы, но используя комбинации извне этой группы.Возьмите следующий пример.Вот фрейм данных, где оценщики смотрят на образцы, а затем отвечают на три вопроса о выборке.Рэйтер А посмотрел образцы 1, 2 и 3, тогда как Рэйтер Б рассмотрел только образцы 1 и 2. Обратите внимание, что Рэйтер Б только выполнил пункт 7060 и 7930 для образца 1, но не завершил пункт 7842. Я хочу обратитьсяэтот неявный выигрыш предмета в явное пропаданиеЦель состоит в том, чтобы добавить строки для элементов, которые отсутствуют в образце, но не добавить образцы, которые отсутствуют в оценщиках (т. Е. Не добавлять образец 3 в оценщик B, но добавить недостающие элементы в образцы, которые были оценены оценщиком B).).
library(tidyverse)
df <- data_frame(
rater_id = c(rep("A", 9), rep("B", 5)),
sample_id = c(rep(1, 3), rep(2, 3), rep(3, 3), rep(1, 2), rep(2, 3)),
item_id = c(7060, 7842, 7930, 9571, 4678, 5966, 1758, 3148, 2574,
7060, 7930, 9571, 4678, 5966),
score = sample(c(0, 1), size = 14, replace = TRUE)
)
df
#> # A tibble: 14 x 4
#> rater_id sample_id item_id score
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 1 7060 0
#> 2 A 1 7842 0
#> 3 A 1 7930 1
#> 4 A 2 9571 0
#> 5 A 2 4678 0
#> 6 A 2 5966 1
#> 7 A 3 1758 0
#> 8 A 3 3148 1
#> 9 A 3 2574 0
#> 10 B 1 7060 0
#> 11 B 1 7930 0
#> 12 B 2 9571 0
#> 13 B 2 4678 1
#> 14 B 2 5966 1
Я пытался использовать tidy::complete
без особого успеха.Вложение с помощью sample_id
и item_id
не добавляет отсутствующую строку, поскольку все комбинации sample_id
и item_id
уже присутствуют в данных.
df %>% complete(nesting(sample_id, item_id))
#> # A tibble: 14 x 4
#> sample_id item_id rater_id score
#> <dbl> <dbl> <chr> <dbl>
#> 1 1 7060 A 0
#> 2 1 7060 B 0
#> 3 1 7842 A 0
#> 4 1 7930 A 1
#> 5 1 7930 B 0
#> 6 2 4678 A 0
#> 7 2 4678 B 1
#> 8 2 5966 A 1
#> 9 2 5966 B 1
#> 10 2 9571 A 0
#> 11 2 9571 B 0
#> 12 3 1758 A 0
#> 13 3 2574 A 0
#> 14 3 3148 A 1
Добавление rater_id
внеоператор вложенности также не может дать желаемый результат.Он успешно добавляет отсутствующую строку для образца 1, но также добавляет дополнительные отсутствующие строки для образца 3. Однако, поскольку Rater B никогда не давал образец 3, мы не будем считать это «отсутствующим» (даже если технически это так).
df %>% complete(rater_id, nesting(sample_id, item_id))
#> # A tibble: 18 x 4
#> rater_id sample_id item_id score
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 1 7060 0
#> 2 A 1 7842 0
#> 3 A 1 7930 1
#> 4 A 2 4678 0
#> 5 A 2 5966 1
#> 6 A 2 9571 0
#> 7 A 3 1758 0
#> 8 A 3 2574 0
#> 9 A 3 3148 1
#> 10 B 1 7060 0
#> 11 B 1 7842 NA
#> 12 B 1 7930 0
#> 13 B 2 4678 1
#> 14 B 2 5966 1
#> 15 B 2 9571 0
#> 16 B 3 1758 NA
#> 17 B 3 2574 NA
#> 18 B 3 3148 NA
Мой идеальный вывод будет выглядеть так:
#> # A tibble: 18 x 4
#> rater_id sample_id item_id score
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 1 7060 0
#> 2 A 1 7842 0
#> 3 A 1 7930 1
#> 4 A 2 4678 0
#> 5 A 2 5966 1
#> 6 A 2 9571 0
#> 7 A 3 1758 0
#> 8 A 3 2574 0
#> 9 A 3 3148 1
#> 10 B 1 7060 0
#> 11 B 1 7842 NA
#> 12 B 1 7930 0
#> 13 B 2 4678 1
#> 14 B 2 5966 1
#> 15 B 2 9571 0