Я искал, но не нашел, как сделать простой if для многих столбцов в dplyr.
У меня есть этот код (он работает):
library(dplyr)
library(magrittr)
data("PlantGrowth")
PlantGrowth %>% mutate (
a=if_else(group=="ctrl", weight*2, weight*100),
b=if_else(group=="ctrl", weight*1,5, weight/100),
c=if_else(group=="ctrl", weight*4, weight*100),
d=if_else(group=="ctrl", weight*5, weight/1000)
)
И я бы не хотел повторять это условие. Примерно так:
PlantGrowth %>% mutate_if_foo (
group=="ctrl",{
a=weight*2,
b=weight*1,5,
c=weight*4,
d=weight*5
}
)%>% mutate_if_foo (
group!="ctrl",{
a=weight*100,
b=weight/100),
c=weight*100),
d=weight/1000)
}
)
Я нашел много ответов на mutate_if
, mutate_all
, mutate_at
, case_when
, но они не отвечают на мой вопрос.
Пожалуйста, используйте dplyr / tidyverse.
Заранее спасибо
EDIT
Я пытался из идеи @Rohit_das о функциях.
mtcars %>% ( function(df) {
if (df$am==1){
df%>% mutate(
a=df$mpg*3,
b=df$cyl*10)
}else{
df%>% mutate(
a=df$disp*300,
d=df$cyl*1000)
}
})
но у меня есть предупреждение:
In if (df$am == 1) { :
the condition has length > 1
and only the first element will be used