Je travaille avec sf
objets et j'ai une question sur l'application de fonctions définies par l'utilisateur aux trames de données. C'est un exemple stupide, mais c'est semblable à ce que j'essaye de faire avec un problème plus compliqué. J'ai une trame de données appelée names
qui a deux colonnes, chacune avec le nom d'un comté. J'ai également lu dans les données de Caroline du Nord inclus avec le paquet sf
.Appliquer à l'aide de caractères
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"))
Ce que je suis en train de faire est de créer une fonction qui descend chaque ligne de mon trame de données names
, prend le nom de la colonne de name_1 et le nom de la colonne NAME_2, et voit si elles recouper en utilisant les données géométriques au nc
. J'ai:
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)
Mais cela donne une erreur de Error in x$name_1 : $ operator is invalid for atomic vectors
. Comment puis-je dire à la fonction pour obtenir les valeurs de caractères sur les colonnes appropriées, pour chaque ligne dans names
?
Pourriez-vous ne pas sous-définir votre objet sf par chaque vecteur, puis exécuter un st_intersects ou st_intersection sur les deux objets? Ne pas comprendre pourquoi vous en avez besoin dans le même df – elmuertefurioso
try: 'check_intersection <- function (x) { return (st_intersects (nc [nc $ NAME == x [1],], nc [nc $ NAME == x [ 2],], sparse = FALSE)) } ' – missuse
Vous ne pouvez pas utiliser l'opérateur' $ 'avec des vecteurs. Remplacez x $ name_1 et les autres par quelque chose comme x [, 1] et x $ name_2 avec x [, 2] – csgroen