2012-11-14 38 views
0

我有這樣subseting數據幀是不是當的NA值

XX

dput(head(xx,10)) 
structure(list(JobName = c("EXBCV01D", "EXBCV01D", "EXBCV01D", 
"EXBCV01D", "EXBCV01D", "EXBCV01D", "EXBCV01D", "EXBCV01D", "EXBCV01D", 
"EXBCV01D"), Date = c(120820L, 120817L, 120816L, 120815L, 120814L, 
120813L, 120810L, 120809L, 120808L, 120807L), TargetDate = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_)), .Names = c("JobName", 
"Date", "TargetDate"), row.names = c(NA, 10L), class = "data.frame") 

我需要抓住的是針對所有行不

數據幀鍵入工作我這樣做 XXX < -with(XX,XX [is.na(TargetDate)!])

我得到這個:

head(xxx) 
     JobName Date TargetDate 
2689 EXBCV06D 120820   -1 
2690 EXBCV06D 120820   -1 
2691 EXBCV06D 120820   -1 
2692 EXBCV06D 120820   -1 
2693 EXBCV06D 120817   -1 
2694 EXBCV06D 120817   -1 

我正在爲同一日期獲取多個JobName。這裏發生了一些奇怪的事情。

回答

0

它應該是is.na(....)而不是is.NA(....),在功能名稱na是小寫字母。

例如使用您的數據

x <- read.table(text = "Date Process Target 
1/1/2012 ftp -2 
1/2/2012 http -1 
1/3/2012 telnet NA 
1/4/2012 ssh NA", header = TRUE, na.strings="NA") 
x <- transform(x, Target = factor(Target)) 

這個作品

R> xx <- subset(x, !is.na(Target)) 
R> xx 
     Date Process Target 
1 1/1/2012  ftp  -2 
2 1/2/2012 http  -1 

您還可以通過平時的子集套路做到這一點:

R> with(x, x[!is.na(Target), ]) 
     Date Process Target 
1 1/1/2012  ftp  -2 
2 1/2/2012 http  -1 

R> x[!is.na(x$Target), ] 
     Date Process Target 
1 1/1/2012  ftp  -2 
2 1/2/2012 http  -1 
+0

那不是。我糾正了我的帖子。我有小寫na。不知何故,當我使用這個函數時,我得到了同一日期的多個進程名稱。有些事情是錯的。如果頭部沒有NA,我該如何子集數據框? – user1471980

+0

然後,這是一個數據問題 - 我不得不重建我認爲是您的數據,因爲「Target」存儲爲您顯示的輸出的一個因素。你對沒有NA的標題提出疑問對我來說沒有任何意義。你可以把'dput(x)'**的輸出發佈到**你的問題中,以便我們看到你正在處理的是什麼。正如我所展示的,正確命名的函數調用確實有效。 –

+0

我已經更新了我正在處理的文件。我嘗試了以上所有建議,但它不起作用。我在同一天獲得多個職位名稱。我應該得到每個不同日期的獨特的工作名稱。 – user1471980

0

此外,您可能會發現complete.cases方便。您可以使用此功能在任何列中刪除任何包含NA的行。

d <- read.table(text="Date Process Target 
1/1/2012 ftp -2 
1/2/2012 http -1 
1/3/2012 telnet NA 
1/4/2012 ssh NA", header=TRUE) 

d[complete.cases(d), ] 

#  Date Process Target 
# 1 1/1/2012  ftp  -2 
# 2 1/2/2012 http  -1 

我只補充一點,你只是建議使用subset功能的交互模式,並在腳本編程沒有。由於該功能評估的方式,可能會出現問題(請參閱discussion)。如果你只是測試東西,使用它感覺很舒服。但是,如果您正在編寫可能被其他人使用的函數,請在安全性方面犯錯,並使用標準的[子集語法@Gavin和我的答案都證明了這一點。