2017-08-30 25 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))