我在数据集中创建了一个不同职位描述的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}}
答案 0 :(得分:7)
您似乎在混合dplyr
和base
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_else
比ifelse
稍微严格一点,要求true
和false
参数的类型相同。
如果您想使用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))