使用if_else,如果条件为false,则无法返回用作条件的列

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)

Ben*_*min 7

你似乎在混合dplyrbaseR框架.

baseR中,你会使用

mydata$new.vary <- ifelse(mydata$color == 'E', mydata$position, mydata$color)
Run Code Online (Sandbox Code Playgroud)

这是有效的,但您应该注意这mydata$position是一个字符对象,并且mydata$color是一个因子,它在内部表示为整数.如果您尝试if_elsedplyr包中运行相同的代码,您将获得以下内容:

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,要求,无论是truefalse参数具有相同的类型.

如果您想使用该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)