R查找缺少行的组,使用现有数据创建新行

时间:2019-06-27 00:16:23

标签: r dplyr

这是问题的简化版本,其中涉及处理大型复杂表。这是输入表:

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. 以正确的字母顺序为第3组插入C和D行。
  3. 使用第3组第B行的score(22)值在新的C和D行中填充score

描述转换的另一种方式是我要两个插入行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 个答案:

答案 0 :(得分:1)

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