Рассчитать новые значения по строке - PullRequest
0 голосов
/ 23 ноября 2018

Я хотел бы создать новый столбец (val_new), в котором каждое значение умножается на значение в другом столбце (val2) на строку.Поскольку я хочу сделать это для нескольких групп, я бы предпочел использовать dplyr, но как?

dat <- data.frame(group = rep(c("A", "B"), each = 3),
                  val1 = c(50, NA, NA, 40, NA, NA),
                  val2 = c(NA, 0.5, 0.3, NA, 0.8, 0.7))

> dat
  group val1 val2
1     A   50   NA
2     A   NA  0.5
3     A   NA  0.3
4     B   40   NA
5     B   NA  0.8
6     B   NA  0.7

dat %>%
  group_by(group) %>%
  mutate(val_new = ifelse(!is.na(val1), val1, lag(val_new) * val2))

Error in mutate_impl(.data, dots) : 
  Evaluation error: object 'val_new' not found.

Желаемый результат:

# A tibble: 6 x 4
# Groups:   group [2]
  group  val1  val2 val_new
  <fct> <dbl> <dbl>   <dbl>
1 A        50  NA        50
2 A        NA   0.5      25
3 A        NA   0.3      7.5
4 B        40  NA        40
5 B        NA   0.8      32
6 B        NA   0.7      22.4

1 Ответ

0 голосов
/ 23 ноября 2018

Попробуйте это:

dat %>% 
   group_by(group) %>% 
       mutate(val_new = cumprod(c(first(val1),val2[-1])))
## A tibble: 6 x 4
## Groups:   group [2]
#  group  val1  val2 val_new
#  <fct> <dbl> <dbl>   <dbl>
#1 A        50  NA      50  
#2 A        NA   0.5    25  
#3 A        NA   0.3     7.5
#4 B        40  NA      40  
#5 B        NA   0.8    32  
#6 B        NA   0.7    22.4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...