2017-08-30 65 views
2

我已经在数据集中创建了不同作业说明的flag变量。我想将每个flag==true更改为与另一个变量相同的行位置。使用if_else,如果条件为假,我无法返回用作条件的列

我试过ifelseif_else;但我已经能够得到的是对true条件和NA S上的改变的值的列表。

下面是使用diamonds可再现例如:

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

回答

6

你似乎是混合dplyrbaseř框架。

base R,你会用

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

这工作,但你应该注意到,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 

if_elseifelse一点更加严格,要求无论是truefalse参数具有相同的类型。

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

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

,或者,如果你想使用dplyrif_else,尝试

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