我需要從現有列派生一列後,檢查是否有有效的條目沒有。 INPUT如何檢查列是否有有效值?
ID
2
4
6
34
輸出
ID ID_ENTRY
2 PRESENT
NOT PRESENT
4 PRESENT
6 PRESENT
NOT PRESENT
NOT PRESENT
34 PRESENT
我需要從現有列派生一列後,檢查是否有有效的條目沒有。 INPUT如何檢查列是否有有效值?
ID
2
4
6
34
輸出
ID ID_ENTRY
2 PRESENT
NOT PRESENT
4 PRESENT
6 PRESENT
NOT PRESENT
NOT PRESENT
34 PRESENT
這裏的一個基礎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")
通常,這可以用is.na
解決:
dat[,"ID_ENTRY"] <- ifelse(is.na(dat[,"ID"]), "NOT PRESENT", "PRESENT")
但是,有時有必要檢查所討論的列的類型和在這種情況下使用不同的方法。舉例來說,如果它character
列,該方法是
dat[, "ID_ENTRY"] <- ifelse(dat[,"ID"]=="", "NOT PRESENT", "PRESENT")
感謝它的工作 – NgBrandon
使用可以使用sapply
。
vec1 <- c("a", "b", "c", "")
vec2 <- sapply(vec1, function(x){ifelse(x == "", "NOT PRESENT", "PRESENT")})
vec2
## "PRESENT" "PRESENT" "PRESENT" "NOT PRESENT"
假設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
>
是那些空的文本字符串或NUMERICS?在R中,如果它是一個數字矢量,你會得到NA。那麼你只需要做'ifelse(!is.na(ID),「PRESENT」,「NOT PRESENT」) –
你有沒有嘗試過任何代碼? –
gsub(「」,'Not Present',ID) – NgBrandon