Mein Ziel ist es, eine Funktion zu definieren, um eine numerische Variable in eine Faktorvariable mit definierten Stufen zu konvertieren und sie im ursprünglichen Dataset mit der Funktion dplyr function muate zu überschreiben.verschachtelt if_else in dplyr mutate_ verhält sich unerwartet
Im Anschluss an die Antwort auf diese früheren question konnte ich die Variable in der ursprünglichen Datensatzes zu überschreiben, aber jetzt ist die verschachtelte if_else im dplyr mutate_ unerwartet wie im folgenden Beispiel zu verhalten:
library(dplyr)
library(lazyeval)
set.seed(1234)
a<-runif(10,1,13)
b<-1:10
data<-data.frame(cbind(a,b))
data #original data
# a b
# 1 2.364441 1
# 2 8.467593 2
# 3 8.311297 3
# 4 8.480553 4
# 5 11.330985 5
# 6 8.683727 6
# 7 1.113949 7
# 8 3.790606 8
# 9 8.993005 9
# 10 7.171014 10
dataout1 <- mutate(data, a=factor(if_else(a<3,"low",if_else(a>3&a<6,"average","high"))))
dataout1 # what I expect
# a b
# 1 low 1
# 2 high 2
# 3 high 3
# 4 high 4
# 5 high 5
# 6 high 6
# 7 low 7
# 8 average 8
# 9 high 9
# 10 high 10
#my function
my_func<-function(datain,var,colname=eval(deparse(substitute(var)))){
dataout <- datain %>% mutate_(.dots=setNames(list(interp(~factor(if_else(var<3,"low",
if_else(var>3&var<6
,"average",
"high"))),
var=colname)),
colname)
)
}
dataout2<-my_func(data,a)
dataout2
# a b
# 1 high 1
# 2 high 2
# 3 high 3
# 4 high 4
# 5 high 5
# 6 high 6
# 7 high 7
# 8 high 8
# 9 high 9
# 10 high 10