ell*_*iot 3 if-statement r dplyr
我flag在数据集中创建了一个不同作业描述的变量.我想将每个flag==true变量放到另一个变量的同一行位置.
我已经尝试了ifelse,if_else;但我能够得到的是true条件和NAs 的更改值列表.
以下是一个可重现的示例diamonds:
mydata <- diamonds[1:10,c(3,4)]
mydata$position <- c('flag','cathy')
mydata
mydata$new.vary <- mydata %>% if_else(color=='E',position,color)
Run Code Online (Sandbox Code Playgroud)
你似乎在混合dplyr和baseR框架.
在baseR中,你会使用
mydata$new.vary <- ifelse(mydata$color == 'E', mydata$position, mydata$color)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但您应该注意这mydata$position是一个字符对象,并且mydata$color是一个因子,它在内部表示为整数.如果您尝试if_else从dplyr包中运行相同的代码,您将获得以下内容:
mydata$new.vary <- if_else(mydata$color == 'E', mydata$position, mydata$color)
Error: `false` must be type character, not integer
Run Code Online (Sandbox Code Playgroud)
if_else是不是有点更加严格ifelse,要求,无论是true与false参数具有相同的类型.
如果您想使用该dplyr方法,您可以使用
mydata %>%
mutate(new.vary = ifelse(color == 'E', position, color))
Run Code Online (Sandbox Code Playgroud)
或者,如果你想使用dplyr's if_else,试试吧
mydata %>%
mutate(color = as.character(color),
new.vary = if_else(color == 'E', position, color))
Run Code Online (Sandbox Code Playgroud)