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

时间:2017-08-30 12:45:22

标签: r if-statement dplyr

我在数据集中创建了一个不同职位描述的flag==true变量。我想将每个ifelse更改为另一个变量的同一行位置。

我已尝试if_else;true,但我能够获得的是NA条件和diamonds的更改值列表。

以下是使用mydata <- diamonds[1:10,c(3,4)] mydata$position <- c('flag','cathy') mydata mydata$new.vary <- mydata %>% if_else(color=='E',position,color)

的可重现示例
{{1}}

1 个答案:

答案 0 :(得分:7)

您似乎在混合dplyrbase R框架。

base R中,您可以使用

mydata$new.vary <- ifelse(mydata$color == 'E', mydata$position, mydata$color)

这样可行,但您应该注意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

if_elseifelse稍微严格一点,要求truefalse参数的类型相同。

如果您想使用dplyr方法,可以使用

mydata %>% 
  mutate(new.vary = ifelse(color == 'E', position, color))

或者,如果您想使用dplyr&#39; if_else,请尝试

mydata %>% 
  mutate(color = as.character(color),
         new.vary = if_else(color == 'E', position, color))