aucune méthode applicable pour 'mutate_' appliquée à un objet de classe "c ('integer', 'numeric')"


karc11

Mon objectif général est de classer une image en utilisant une forêt aléatoire. Le dataframe contient des données de formation; où «landcover» contient les classes 0, 1 et 2. J'essaie de réduire le nombre de classes en changeant tous les 2 en 0, en utilisant la méthode de dplyr transmute (). L'ensemble du code fonctionne à l'exception de la dernière ligne critique - GP_training1 <- transmute(GP_data$landcover, landcover = ifelse(landcover==1,1,0)). Quand j'exécute cela, j'obtiens l'erreur: aucune méthode applicable pour 'mutate_' appliquée à un objet de classe "c ('integer', 'numeric')". Des idées pourquoi cela peut être? Le code pertinent est collé ci-dessous.

#import raster and shapefile; each color band is overlayed on top of 
eachother w coordinate system underneath
GP_1_4 <- brick("Downloads/Landsat Mosaics/GP_1-4.tif")
names(GP_1_4) <- c("Red","Green","SWIR")
GP_1_4 <- subset(GP_1_4, order(c(3, 2, 1)))
plotRGB(GP_1_4,stretch="lin")

#import shapefile of training points
GP_training < readOGR("Downloads/GP_716_shapefile3/GP_716_training3.shp", layer="GP_716_training3")
list.files("GP_716_shapefile3")

#extract points from raster 
dataSet <- as.data.frame(extract(GP_1_4, GP_training))

#and put in same dataframe as training data
GP_training$data = data.frame(GP_training$data, dataSet[match(rownames(GP_training$data), rownames(dataSet)),])
GP_training$data = GP_training$data[complete.cases(GP_training$data),]

#make a new dataframe, identical to GP_training, except the 2's are changed to 0's
GP_training1 <- GP_training
GP_data <- GP_training1$data
GP_training1 <- transmute(GP_data$landcover, landcover = ifelse(landcover==1,1,0))

NOUVELLE MODIFICATION: En utilisant la fonction isS4 (), j'ai découvert que GP_training est un objet S4. Pendant ce temps, la documentation R dit que "Tous les verbes principaux sont des génériques S3" pour transmute (). Je ne connais pas très bien S3 et S4, mais est-ce que c'est là que l'erreur se produit?

divibataire

dplyr::transmutene peut être utilisé sur un data.frame, mais vous lui avez donné un vecteur: GP_data$landcover. Vous devriez lui donner le data.frame et le laisser fonctionner avec ça.

Ceci est différent du code que vous utilisez, mais il fait ce que votre commentaire dit:

library(dplyr)

GP_training1 <- GP_training %>%                   # Create a new data.frame from GP_training
    mutate(landcover = ifelse(landcover==1,1,0))  # Change the value of `landcover` to 
                                                  #  either 1 or 0 based on its current value

Utilisez mutateau lieu de transmutecar mutateajoute / modifie des variables en quittant celles-ci. transmutene conserve que les variables que vous créez

Articles connexes