2016-08-12 39 views
1

我有一個數據幀,看起來是這樣的:鏈ifelse有發生變異不工作

placeID <- c(001, 002, 003, 004, 005) 
faultDscr <- c("6940 broken", "6122 not working", "6122 broken", "6940 not working", "printer not working") 
partID <- c("PTR-HP-6940", NA, "PTR-HP-6122", NA, NA) 
myData <- data.frame(placeID, faultDscr, partID) 

我想創建一個新的變量,如果一個網站使用的是6122噴墨因爲我dplyr管道的一部分來識別。新的變量應該包含Y或我用下面的代碼N.:

library(dplyr) 
inkjetSites <- myData %>% 
mutate(inkjetSite = ifelse(partID == "PTR-HP-6122", "Y", 
          ifelse(is.na(partID) && grep("6122", faultDscr), "Y", "N"))) 

我希望能得到這樣的輸出:

inkjetSite <- c("N", "Y", "Y", "N", "N") 
inkjetSitesCor <- data.frame(placeID, faultDscr, partID, inkjetSite) 

不過,我不是有一個像輸出:

inkjetSite <- c("N", NA, "Y", NA, NA) 
inkjetSitesInCor <- data.frame(placeID, faultDscr, partID, inkjetSite) 

任何幫助將不勝感激。

回答

0

我們可以%in%嘗試刪除==爲NA將繼續爲NA存在(除非我們創建了一個& !is.na(partID)),改變&&&,也從grep改變grepl(邏輯矢量輸出)

myData %>% 
    mutate(inkjetSite = ifelse(partID %in% "PTR-HP-6122", "Y", 
       ifelse(is.na(partID) & grepl("6122", faultDscr), "Y", "N"))) 
# placeID   faultDscr  partID inkjetSite 
#1  1   6940 broken PTR-HP-6940   N 
#2  2 6122 not working  <NA>   Y 
#3  3   6122 broken PTR-HP-6122   Y 
#4  4 6940 not working  <NA>   N 
#5  5 printer not working  <NA>   N 

這可以在沒有ifelse

myData %>% 
    mutate(inkjetSite = c("N", "Y")[partID %in% "PTR-HP-6122" + 
       (is.na(partID) & grepl("6122", faultDscr)) + 1]) 
也做