1

以前にシェープファイルに情報を正常に追加しました(http://ruse​​rgroup.swansea.ac.uk/Healthmap.ashx?HL=mapの私の投稿を参照してください)。

ただし、わずかに異なるシェープファイル(ウェールズの新しいローカルヘルスボード)を使用してもう一度実行しようとすると、コードがspCbind「行名が同一ではないエラー」で失敗します。

o <- match(wales.lonlat$NEW_LABEL, wds$HB_CD)
wds.xtra <- wds[o,]
wales.ncchd <- spCbind(wales.lonlat, wds.xtra)

以前は私の行の名前が異なっていたので、問題は発生しませんでした。wds.xtraの列のラベルを「NEW_LABEL」に一致するように変更しましたが、それは役に立ちません。

ラベルとラベルの順序は、wales.lonlatとwds.xtraの間で正確に一致します。

(私はR2.13.2上に構築されたRevolutionR 5.0を使用しています)

4

2 に答える 2

3

行名 (またはその他の一般的な ID) に基づいて、データを sp データ スロットにマージするために match を使用します。これにより、spCbind 関数に maptools を使用する必要がなくなります。

# Based on rownames
sdata@data=data.frame(sdata@data, new.df[match(rownames(sdata@data), rownames(new.df)),])

# Based on common ID
sdata@data=data.frame(sdata@data, new.df[match(sdata@data$ID, new.df$ID),])

# where; sdata is your sp object and new.df is a data.frame object that you want to merge to sdata.
于 2012-10-30T19:14:38.763 に答える
1

同じエラーが発生し、実際には追加されなかった他のすべてのデータを削除することで解決できました。マッチングは、指定されたものだけでなく、すべての行要素と一致することを望んでいたため、彼らは spCbind を混乱させたと思います。私の例では、私は使用しました

xtra2 <- data.frame(xtra$ID_3, xtra$COMPANY)

関連するフィールドを抽出し、後で spCbind にフィードする

gadm <- spCbind(gadm, xtra2)
于 2014-03-17T15:56:37.970 に答える