2017-10-16 77 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 
>