Как я могу преобразовать переменную столбца во взаимоисключающую строку регистра? - PullRequest
0 голосов
/ 25 марта 2019

Извинения за заголовок, правки для ясности приветствуются.У меня есть какая-то таблица, которая выглядит следующим образом, с несколькими случаями и переменной all для каждого случая, а также переменной B2.Случаи имеют такую ​​иерархию, что здесь B означает все B, которые не A, так что all сумм до 100. Я хочу включить дополнительный случай B2 между B и Cкоторый следует этому шаблону.

library(tidyverse)
tbl <- tribble(
  ~case, ~all, ~B2,
  "A", 10, 5,
  "B", 20, 7,
  "C", 30, 10,
  "D", 40, 15
)

Вот желаемый результат.Обратите внимание, что значение для случая B2 равно 25, что составляет 10 + 15 из таблицы выше.Эти значения были соответственно вычтены из случаев C и D.

tbl_out <- tribble(
  ~case, ~all,
  "A", 10,
  "B", 20,
  "B2", 25,
  "C", 20,
  "D", 25,
)

Вот моя очень грязная попытка получить желаемый результат.Я чувствую, что должен быть какой-то способ лучше кодировать «иерархию» в случаях (путем сортировки?) Вместо того, чтобы вручную указывать preceding и связывать таблицы вместе.Любые предложения?

tbl %>%
  mutate(
    preceding = case %in% c("A", "B"),
    new_vals = if_else(preceding, all, all - B2)
  ) %>%
  bind_rows(
    group_by(., preceding) %>%
      summarise(case = "B2", new_vals = sum(B2))
  ) %>%
  filter(!is.na(B2) | preceding == FALSE) %>%
  select(case, new_vals) %>%
  arrange(case)
#> # A tibble: 5 x 2
#>   case  new_vals
#>   <chr>    <dbl>
#> 1 A           10
#> 2 B           20
#> 3 B2          25
#> 4 C           20
#> 5 D           25

Создано в 2019-03-25 пакетом Представить (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...