2017-08-05 49 views

回答

0

你可以只用子集的is.na()數據幀:這裏

df1 <- df[!is.na(df$var2), ] 
df2 <- df[is.na(df$var2), ] 

演示:

Rextester

1

嗨試試這個

new_DF <- DF[rowSums(is.na(DF)) > 0,] 

或者如果你想查詢的特定列,您還可以使用

new_DF <- DF[is.na(DF$Var),] 

如果您有NA字符值,首次運行

Df[Df=='NA'] <- NA 

將其替換爲缺失值。

0

split函數在這種情況下很容易出現。

data <- read.table(text="var1 var2 
    1 21 
    2 NA 
    3 NA 
    4 10", header=TRUE) 

split(data, is.na(data$var2)) 
# 
# $`FALSE` 
# var1 var2 
# 1 1 21 
# 4 4 10 
# 
# $`TRUE` 
# var1 var2 
# 2 2 NA 
# 3 3 NA 
0

另一種更普遍的方法是使用complete.cases命令。命令找出沒有缺失值的行(無NAs)並返回TRUE/FALSE值。

dt = data.frame(var1 = c(1,2,3,4), 
       var2 = c(21,NA,NA,10)) 

dt1 = dt[complete.cases(dt),] 
dt2 = dt[!complete.cases(dt),] 

dt1 

# var1 var2 
# 1 1 21 
# 4 4 10 

dt2 

# var1 var2 
# 2 2 NA 
# 3 3 NA 
2

查看更多詳細信息:

大多數統計功能(例如,LM())有類似na.action它適用於模型,而不是單個變量。 na.fail()如果沒有NA值則返回對象(數據集),否則返回NA(停止分析)。 na.pass()返回數據對象是否具有NA值,如果該函數在內部處理NA值,這非常有用。 na.omit()如果模型中使用的任何變量對於該觀測值都是NA,則會忽略整個觀察值(行)的對象。 na.exclude()與na.omit()相同,只是它允許使用naresid或napredict的函數。您可以將na.action想象爲數據對象上的函數,其結果是lm()函數中的數據對象。在LM()函數的語法允許na.action作爲參數的規範:

lm(na.omit(dataset),y~a+b+c) 
lm(dataset,y~a+b+c,na.omit) # same as above, and the more common usage 

可以設置缺失值的默認處理與

options("na.actions"=na.omit)