2010-10-25 108 views
1

我有一個數據集在一個字段中有一些空值。當我嘗試運行線性迴歸時,它將字段中的整數視爲類別指示符,而不是數字。如何忽略R中的空值?

例如,爲不包含空值的字段...

summary(lm(rank ~ num_ays, data=a)), 

返回:

Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 10.607597 0.019927 532.317 < 2e-16 *** 
num_ays  0.021955 0.007771 2.825 0.00473 ** 

但是當我運行與空值的字段相同的模型,我得到:

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  

(Intercept) 1.225e+01 1.070e+00 11.446 < 2e-16 *** 
num_azs0 -1.780e+00 1.071e+00 -1.663 0.09637 . 
num_azs1 -1.103e+00 1.071e+00 -1.030 0.30322  
num_azs10 -9.297e-01 1.080e+00 -0.861 0.38940  
num_azs100 1.750e+00 5.764e+00 0.304 0.76141  
num_azs101 -6.250e+00 4.145e+00 -1.508 0.13161  

什麼是最好的和/或最有效的方式來處理這個,什麼是權衡?

+0

說到空你有'NA'記住? 'num_azs'是否是'因素'有可能?看起來像不是我清理的數據... – Marek 2010-10-25 19:50:43

+0

我不認爲這是一個因素。 num_ays和num_azs都來自MySQL導出。兩者的字段類型都是整數,但num_azs可以包含空值。 – Dan 2010-10-25 19:56:23

+0

摘要(一)說你的數據列是什麼?我猜一個非數字值導致轉換爲因子。解決方案是使用as.numeric(as.character(foo))轉換爲數字 – Spacedman 2010-10-25 20:52:32

回答

2

,並建立對巴蒂爾的回答是:你可以使用在data=說法lm()

summary(lm(rank ~ num_ays, data=a[!is.null(a$num_ays),])) 
+0

謝謝,Dirk。我嘗試過,但它仍然將列中的數字視爲類別標籤......與以前相同的結果。我是否還錯過了其他的東西? – Dan 2010-10-25 19:50:17

+0

你正在被因素絆倒。這是一個不同的問題。嘗試搜索「[r]因子」(即R中標記爲「[r]」的帖子中的術語「因子」)。您需要以不同方式讀取數據,和/或將其轉換。 – 2010-10-25 20:34:34

+1

使用'lm'的'subset'參數不是更好嗎? – Marek 2010-10-25 21:59:01

3

可以忽略空值,像這樣:

a[!is.null(a$num_ays),] 
+0

謝謝,謝恩。我嘗試使用:summary(lm(rank_num_ays,data = a [!is.null(a $ num_ays)]))。不過,它給了我相同的輸出。 – Dan 2010-10-25 19:44:52

+1

如果object爲NULL,則is.null返回TRUE,否則返回FALSE。所以你的構造函數會返回'a'行或0行'data.frame'的所有行。我很確定你在考慮'is.na';) – Marek 2010-10-26 07:23:57