0
私はsf
オブジェクトを使用していますが、データフレームにユーザー定義関数を適用する方法について質問があります。これは馬鹿げた例ですが、もっと複雑な問題でやっているのと似ています。私はnames
という名前のデータフレームを持っています。このフレームには、それぞれが郡の名前を持つ2つの列があります。私はsf
パッケージに含まれているノースカロライナのデータも読みました。文字を使用して適用
require(sf)
name_1 <- c('Ashe','Alleghany','Surry')
name_2 <- c('Currituck','Northampton','Hertford')
names <- data.frame(cbind(name_1,name_2))
nc <- st_read(system.file("shape/nc.shp", package="sf"))
は私のデータフレームnames
の各行をダウンした関数を作成している、NAME_2列のうち、NAME_1列と名のうち、名前を取り、彼らならば見てジオメトリデータnc
を使用して交差します。私が持っている:
check_intersection <- function(x){
return(st_intersects(nc[nc$NAME== x$name_1,],nc[nc$NAME==x$name_2,],sparse = FALSE))
}
apply(names,1,check_intersection)
しかし、これはError in x$name_1 : $ operator is invalid for atomic vectors
のエラーを生成します。どのようにして、各行の適切な列から文字値を取得するように関数に指示しますか?names
?
sfオブジェクトを各ベクトルでサブセット化してから、2つのオブジェクトに対してst_intersectsまたはst_intersectionを実行できませんか?なぜあなたは同じdfでそれらが必要なのか理解していない – elmuertefurioso
try: 'check_intersection < - function(x){ return(st_intersects(nc [Nc $ NAME == x [1]、]、nc [nc $ NAME == x [ 2]、]、sparse = FALSE)) } ' – missuse
ベクトルで' $ '演算子を使うことはできません。 x $ name_1とそれ以外はx [、1]とx $ name_2とx [、2]と置き換えてください – csgroen