У меня есть следующий фрейм данных
library(tidyverse)
x <- c(1,2,3,NA,NA,4,5)
y <- c(1,2,3,5,5,4,5)
z <- c(1,1,1,6,7,7,8)
df <- data.frame(x,y,z)
df
x y z
1 1 1 1
2 2 2 1
3 3 3 1
4 NA 5 6
5 NA 5 7
6 4 4 7
7 5 5 8
Я бы хотел обновить фрейм данных в соответствии со следующими условиями
- Если z == 1, обновить до x = 1,иначе оставьте текущее значение для x
- Если z == 1, обновите до y = 2, иначе оставьте текущее значение для y
Следующий код отлично справляется с работой
df %>% mutate(x=if_else(z==1,1,x),y=if_else(z==1,2,y))
x y z
1 1 2 1
2 1 2 1
3 1 2 1
4 NA 5 6
5 NA 5 7
6 4 4 7
7 5 5 8
Однако я должен добавить оператор if_else для функций мутации x и y. Это может сделать мой код сложным и трудным для чтения. Чтобы привести аналогию с SQL, рассмотрим следующий код
UPDATE df
SET x= 1, y= 2
WHERE z = 1;
Я бы хотел добиться следующего:
- Укажите условие обновления заранее, поэтому я не будуЯ должен повторять это для каждой функции преобразования
- Я бы хотел избежать использования data.table или base R. Я использую dplyr, поэтому я хотел бы придерживаться его для согласованности