Найти группу с отсутствующими строками, создать новые строки, используя существующие данные - PullRequest
0 голосов
/ 27 июня 2019

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

library(tidyverse)
input <- tribble(
  ~group, ~score, ~label,
  1, 10, 'A',
  1, 20, 'B',
  1, 30, 'C',
  1, 40, 'D',
  2, 11, 'A',
  2, 21, 'B',
  2, 31, 'C',
  2, 41, 'D',
  3, 12, 'A',
  3, 22, 'B',
  4, 13, 'A',
  4, 23, 'B',
  4, 33, 'C',
  4, 43, 'D'
)

Таблица состоит из 14 строк.Данные сгруппированы в пронумерованные группы (1: 4), в каждой группе должно быть четыре балла, помеченных как A, B, C, D. Проблема в группе 3, в которой отсутствуют строки C и D.

Я хочу, чтобы R сделал следующее:

  1. Найдите группу 3 на основе отсутствия в ней строк C и D.
  2. Вставьте строки C и D для группы 3 в правильной алфавитной последовательности.
  3. Заполните score в новых строках C и D значением score (22) из ​​строки 3 группы B.

Другой способ описания преобразованияя хочу, чтобы две вставили две копии строки 3B, изменив метку этих скопированных строк с B на C и D. соответственно.

Желаемая выходная таблица имеет 16 строк и выглядит следующим образом:

output <- tribble(
  ~group, ~score, ~label,
  1, 10, 'A',
  1, 20, 'B',
  1, 30, 'C',
  1, 40, 'D',
  2, 11, 'A',
  2, 21, 'B',
  2, 31, 'C',
  2, 41, 'D',
  3, 12, 'A',
  3, 22, 'B',
  3, 22, 'C',
  3, 22, 'D',
  4, 13, 'A',
  4, 23, 'B',
  4, 33, 'C',
  4, 43, 'D'
)

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 27 июня 2019
complete(input, group, label) %>%
  fill(score)

# A tibble: 16 x 3
   group label score
   <dbl> <chr> <dbl>
 1     1 A        10
 2     1 B        20
 3     1 C        30
 4     1 D        40
 5     2 A        11
 6     2 B        21
 7     2 C        31
 8     2 D        41
 9     3 A        12
10     3 B        22
11     3 C        22
12     3 D        22
13     4 A        13
14     4 B        23
15     4 C        33
16     4 D        43
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...