2011-12-07 75 views
4

我有一個問題,我想匹配一個非常大的調查數據集的開始郵政編碼和結束郵政編碼,並將這些結果放在新的數據框中。我創建了一個示例數據框用於說明。通過郵編進行子集(因子水平)

ID = c(1,2,3,4,5) 
StartPC = c("AF2 4RE","AF3 5RE","AF1 3DR","AF2 4RE","AF2 4PE") 
EndPC = c("AF2 4RE","NA","AF2 3DR","AX2 4RE","AF2 4PE") 
data<-data.frame(ID,StartPC,EndPC) 

data2 <- subset(data, StartPC==EndPC,na.rm=TRUE) 

使用上面的代碼,我想創建一個數據幀(數據2),其僅包括ID號,由此開始和結束郵政編碼是相同的。然而,我得到的錯誤消息:

錯誤Ops.factor(StartPC,EndPC):水平集的因素是不同

輸出需求只是爲了有ID號1和5包含在新的數據表。

回答

8

那將是因爲

Error in Ops.factor(StartPC, EndPC) : level sets of factors are different 

你的兩列的因素,而不是字符。因素是分類變量,它們以整數形式存儲,並有一個「級別」查找表。比較它們實際上是比較基本整數,所以R確保你比較具有相同級別的因素。如果沒有,那麼它決定你正在做一件壞事。

所以轉換爲字符:

> subset(data, as.character(StartPC)==as.character(EndPC),na.rm=TRUE) 
    ID StartPC EndPC 
1 1 AF2 4RE AF2 4RE 
5 5 AF2 4PE AF2 4PE 

無論是在像飛,或用使字符數據框擺在首位,或者確保兩個列都具有相同的水平作出。

+1

我會補充說'stringsAsFactors = FALSE'參數在讀取data.frame時首先可以通過'read.csv()'或類似方法獲得幫助。 –