используйте DPLYR для добавления новой строки в качестве расчета других сгруппированных строк - PullRequest
0 голосов
/ 15 января 2019

У меня есть объект данных, подобный следующему:

> temp2 %>% arrange(date_val) %>% select(date_val,kpi_name,kpi_value)
# Source:     spark<?> [?? x 3]
# Ordered by: date_val
   date_val     kpi_name              kpi_value
   <dttm>              <chr>                     <dbl>
 1 2018-12-04 00:00:00 KPI1                          0
 2 2018-12-04 00:00:00 KPI2                         38
 3 2018-12-04 00:01:00 KPI2                         55
 4 2018-12-04 00:01:00 KPI1                          1
 5 2018-12-04 00:02:00 KPI2                         55
 6 2018-12-04 00:02:00 KPI1                          1
 7 2018-12-04 00:03:00 KPI1                          0
 8 2018-12-04 00:03:00 KPI2                         58
 9 2018-12-04 00:04:00 KPI2                         45
10 2018-12-04 00:04:00 KPI1                          1
# ⦠with more rows
>

Я хотел бы вставить новую строку для каждого сгруппированного date_val, который будет выполнять вычисление для этой группы date_val для kpi_name / kpi_value, доступного в текущем объекте. Например, скажем, мне нужно вычислить следующий новый KPI3 как 100 * (KPI1 / KPI2), который предоставит новый объект данных, такой как:

# Source:     spark<?> [?? x 3]
# Ordered by: date_val
   date_val     kpi_name              kpi_value
   <dttm>              <chr>                     <dbl>
 1 2018-12-04 00:00:00 KPI1                          0
 2 2018-12-04 00:00:00 KPI2                         38
 3 2018-12-04 00:00:00 KPI3                          0
 4 2018-12-04 00:01:00 KPI2                         55
 5 2018-12-04 00:01:00 KPI1                          1
 6 2018-12-04 00:01:00 KPI3                      0.018
 7 2018-12-04 00:02:00 KPI2                         55
 8 2018-12-04 00:02:00 KPI1                          1
 9 2018-12-04 00:02:00 KPI3                      0.018
10 2018-12-04 00:03:00 KPI1                          0
11 2018-12-04 00:03:00 KPI2                         58
12 2018-12-04 00:03:00 KPI3                          0
13 2018-12-04 00:04:00 KPI2                         45
14 2018-12-04 00:04:00 KPI1                          1
15 2018-12-04 00:04:00 KPI3                      0.022
# ⦠with more rows

Можно ли это сделать в DPLYR?

1 Ответ

0 голосов
/ 15 января 2019

Это должно сделать это:

library(tidyverse)

temp2 %>% spread(kpi_name, kpi_value) %>% 
  mutate(KPI3 = 100*(KPI1/KPI2)) %>% 
  gather(kpi_name, kpi_value, -date_val)

Хотя технически это возможно rbind в новых строках, это сравнительно неэффективно и синтаксически неуклюже. Гораздо больше смысла преобразовать в логический широкий формат, добавить столбец и затем преобразовать обратно.

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