2016-08-12 43 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]) 
也做