2013-07-10 206 views
1

去年11月,我問了一個關於從兩個不同數據幀(here)中獲取子集數據的問題。我想從data1中選擇與data2中所需行相同緯度的行。現在我有不一樣的,但有一個類似的問題。R子集數據幀丟失行

我的數據文件有這樣的結構:

數據文件

date time stat_id lat lon tempc 
20121122 0 1 0.407353E+02 -0.165700E+00 0.798737E+01 
20121122 0 2 0.406287E+02 -0.113300E+00 0.649903E+01 
20121122 0 3 0.406621E+02 -0.209800E+00 0.772955E+01 
20121122 0 4 0.403943E+02 -0.126100E+00 0.798837E+01 
20121122 0 5 0.404532E+02 0.604000E-01 0.103548E+02 

地方文件

Zona Poble stat_id  lat lon  alt 
1 Zorita    1 0.407353E+02 -0.165700E+00 691.867004 
1 Morella 2 0.406287E+02 -0.113300E+00 955.718994 
1 Forcall 3 0.406621E+02 -0.209800E+00 753.882019 
2 Benasal 4 0.403943E+02 -0.126100E+00 848.171021 
2 Cati   5 0.404532E+02 0.604000E-01 667.609985 

它們共用stat_id場。我想要根據地點$ Zona子集數據文件。舉個例子,如果我想Zona是1,那麼需要提取3個地方,stat_id = 1,2,3。對於子集我使用這個命令:

zona1=subset(data,data$stat_id == places$stat_id[places$Zona == 1]) 

這成功地選擇在數據文件行的三個站,但不是所有行stat_id爲1,2或3,數據文件包含每小時數據,但zona1只顯示時間數據0,3,6,9,12,15,18,21,24小時。當發出命令我得到這樣的警告:

Mensajes de aviso perdidos 
In data$stat_id == places$stat_id[places$Zona == 1] : 
    larger object length is not a multiple of the smaller one 

(原諒我的警告信息的翻譯)

zona1輸出

"","date","time","stat_id","lat","lon","tempc" 
"1",20121122,0,1,40.7353,-0.1657,7.98737 
"2",20121122,0,2,40.6287,-0.1133,6.49903 
"3",20121122,0,3,40.6621,-0.2098,7.72955 
"385",20121122,30000,1,40.7353,-0.1657,7.00632 
"386",20121122,30000,2,40.6287,-0.1133,4.83684 
"387",20121122,30000,3,40.6621,-0.2098,6.42246 
"769",20121122,60000,1,40.7353,-0.1657,6.55283 
"770",20121122,60000,2,40.6287,-0.1133,4.85467 
"771",20121122,60000,3,40.6621,-0.2098,5.90663 
"1153",20121122,90000,1,40.7353,-0.1657,6.35216 
"1154",20121122,90000,2,40.6287,-0.1133,5.66342 
"1155",20121122,90000,3,40.6621,-0.2098,6.15894 

這是我想要的腳本:

datos=read.table("data.dat",header=T) 
pobles=read.table("pobles-zona.dat",header=T) 

data=as.data.frame(datos) 
places=as.data.frame(pobles) 

zona1=subset(data,data$stat_id == places$stat_id[places$Zona == 1]) 

和數據文件可在

data.dathttp://ubuntuone.com/0pDaVxaBQZWZSAVr2b3n6v

pobles-zona.dathttp://ubuntuone.com/753L9uFbntRc46Ah5gIZdp

我失去了一些東西,任何幫助,將不勝感激。

在此先感謝

+2

只是一個猜測,但我要說的是缺失值絆倒你。如果您在%places $ stat_id'中將'stat_id ==將$ stat_id'替換爲'stat_id%',會發生什麼情況。 ('%in%'忽略了NAs而不是傳播它們。) –

+0

它的工作原理!謝謝@HongOoi它現在運行良好,但爲什麼?數據文件中沒有NAs。 – pacomet

+0

@pacomet我懷疑這裏不是「不適用」,但data'stat_id'與'place $ stat_id [places $ Zona == 1]'的長度不是一樣的長度,所以平等測試會回收較短的一個,這不是你想要的。 –

回答

0

這個問題已經由Hong Ooi的評論解決了。它只是在%

更換==通過的%分辯一個是

zona1=subset(data,data$stat_id %in% places$stat_id[places$Zona == 1]) 

感謝香港和卡爾