1

昨年の 11 月に、2 つの異なるデータ フレームからのデータのサブセット化について質問しました (こちら)。data2 から目的の行と同じ緯度を持つ data1 から行を選択したかったのです。今、私は同じではなく、同様の問題を抱えています。

私のデータファイルはこの構造を持っています:

データファイル

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 フィールドを共有しています。place$Zona に応じてデータ ファイルをサブセット化したい。例として、Zona を 1 にしたい場合、stat_id=1,2,3 の 3 つの場所が抽出されます。サブセット化には、次のコマンドを使用します。

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

これにより、3 つのステーションのデータ ファイル内の行が正常に選択されますが、stat_id が 1、2、または 3 であるすべての行が選択されるわけではありません。 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.dat http://ubuntuone.com/0pDaVxaBQZWZSAVr2b3n6v

pobles-zona.dat http://ubuntuone.com/753L9uFbntRc46Ah5gIZdp

私は何かが欠けているはずです、どんな助けもいただければ幸いです。

前もって感謝します

4

1 に答える 1

0

Hong Ooiさんのコメントで疑問が解決しました。== を %in% に置き換えただけです

正しかったのは

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

ホンとカールに感謝

于 2013-07-10T13:39:38.017 に答える