2017-10-16 73 views
0

我需要从现有列派生一列后,检查是否有有效的条目没有。 INPUT如何检查列是否有有效值?

ID 
    2 

    4 
    6 


    34 

输出

ID ID_ENTRY 
2 PRESENT 
    NOT PRESENT 
4 PRESENT 
6 PRESENT 
    NOT PRESENT 
    NOT PRESENT 
34 PRESENT 
+1

是那些空的文本字符串或NUMERICS?在R中,如果它是一个数字矢量,你会得到NA。那么你只需要做'ifelse(!is.na(ID),“PRESENT”,“NOT PRESENT”) –

+0

你有没有尝试过任何代码? –

+0

gsub(“”,'Not Present',ID) – NgBrandon

回答

3

这里的一个基础R选项是使用ifelse

df$ID_ENTRY <- ifelse(ID != "", "PRESENT", "NOT PRESENT") 

如果你能有空字符串,null或NA遗漏值那么我们可以使用:

df$ID_ENTRY <- ifelse(ID != "" & !is.na(ID) & !is.null(ID), 
         "PRESENT", "NOT PRESENT") 
1

通常,这可以用is.na解决:

dat[,"ID_ENTRY"] <- ifelse(is.na(dat[,"ID"]), "NOT PRESENT", "PRESENT") 

但是,有时有必要检查所讨论的列的类型和在这种情况下使用不同的方法。举例来说,如果它character列,该方法是

dat[, "ID_ENTRY"] <- ifelse(dat[,"ID"]=="", "NOT PRESENT", "PRESENT") 
+0

感谢它的工作 – NgBrandon

0

使用可以使用sapply

vec1 <- c("a", "b", "c", "") 
vec2 <- sapply(vec1, function(x){ifelse(x == "", "NOT PRESENT", "PRESENT")}) 
vec2 
## "PRESENT"  "PRESENT"  "PRESENT" "NOT PRESENT" 
0

假设ID是factor

ss <- data.frame(ID = c(2,' ',4,6,' ',' ',34)) 

> ss$ID_ENTRY <- lapply(ss$ID,function(x){ifelse(is.na(as.numeric(as.character(x))),'NOTPRESENT','PRESENT')}) 
> ss 
    ID ID_ENTRY 
1 2 PRESENT 
2 NOTPRESENT 
3 4 PRESENT 
4 6 PRESENT 
5 NOTPRESENT 
6 NOTPRESENT 
7 34 PRESENT 
>