2014-10-21 91 views
0

我有一個距離變量(以米爲單位)來自特定源的屬性,通過QGIS在我的數據子集中創建。虛擬變量代碼R中的間隔

我想創建虛擬間隔與R如下:

0-100,101-200,201-300,301-400 & 401-500

我已經編碼爲以包括以下任何間隔內的所有屬性:

data$Distance_100<-0 
data$Distance_100[data$Distance<100]<-1 

data$Distance_200<-0 
data$Distance_200[data$Distance>=101&data$Distance<200]<-1 

data$Distance_300<-0 
data$Distance_300[data$Distance>=201&data$Distance<300]<-1 

data$Distance_400<-0 
data$Distance_400[data$Distance>=301&data$Distance<400]<-1 

data$Distance_500<-0 
data$Distance_500[data$Distance>=401&data$Distance<500]<-1 

似乎在編碼方面有問題。它不會將所有屬性放在間隔中,看起來正確的編碼。有什麼建議做什麼?

+0

除了迄今爲止的有用答案外,請查看'findInterval',並在SO上發佈問題前學習搜索。 – 2014-10-21 23:20:03

回答

2

使用cut函數來創建一個單一分類變量的時間間隔:

data$DistanceCut5 = cut(data$Distance, breaks=c(0,100,200,300,400,500)) 

如果你正在做迴歸,你不需要代碼中分離虛擬變量。如果您將DistanceCut5輸入到迴歸公式中,R將爲您處理該問題。

而且,看看在幫助cut所以你可以看到如何改變類別標籤(使用labels參數)以及如何確定區間的左側或右側是否關閉(使用right參數)。

此外,如果Distance的任何值大於500,cut會將類別標籤設置爲NA(缺失)。如果要確保Distance的所有值都具有DistanceCut5中的類別值,請確保levels的最低值和最高值之間的範圍包含Distance中的所有值。

另外一種風格的評論:data實際上是R中的一個函數,所以最好不要養成將它用作數據框名稱的習慣。

+0

'model.matrix(〜DistanceCut5 + 0,data = data)'然後會根據需要給你分開的列。 – thelatemail 2014-10-21 23:14:30

+0

謝謝@ eipi10!只有一個(愚蠢的)問題。 0-100的區間似乎不被估計?只是 DistanceCut(100,200] DistanceCut(200,300]等,所以是101-200 201-300?所以也沒有重疊。 非常感謝! – Karl 2014-10-21 23:46:33

+0

你的意思是你的數據幀開始或者是這個迴歸分析的結果?如果是後者,那麼'(0,100]'是基本類別,其他類別係數是相對於基本類別。這就像傳統的虛擬編碼一樣。想要在迴歸中加入攔截 – eipi10 2014-10-21 23:49:49