r - 没有适用于 'mutate_' 的方法应用于类 "c(' 整数', 'numeric' ) 的对象”

标签 r class dplyr random-forest

我的总体目标是使用随机森林对图像进行分类。数据框包含训练数据;其中“landcover”包含类 0、1 和 2。我试图通过使用 dplyr transmute() 方法将所有 2 更改为 0 来减少类的数量。除了关键的最后一行之外,整个代码都有效 - GP_training1 <- transmute(GP_data$landcover, landcover = ifelse(landcover==1,1,0)) 。当我运行此命令时,出现错误:没有适用于“mutate_”的方法应用于“c('integer', 'numeric')”类的对象。有什么想法吗?下面粘贴了相关代码。

#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))

新编辑: 使用函数 isS4(),我发现 GP_training 是一个 S4 对象。同时,R 文档说 transmute() 的“所有主要动词都是 S3 泛型”。我对 S3 和 S4 不太熟悉,但这可能是错误发生的地方吗?

最佳答案

dplyr::transmute 只能在 data.frame 上使用,但您给了它一个向量:GP_data$landcover。您应该给它 data.frame 并让它使用它。

这与您使用的代码不同,但它执行您的评论所述:

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

使用mutate而不是transmute,因为mutate会在退出变量时添加/更改变量。 transmute 仅保留您创建的变量

关于r - 没有适用于 'mutate_' 的方法应用于类 "c(' 整数', 'numeric' ) 的对象”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394592/

相关文章:

r - 使用 dplyr 添加基于最大行值的新列?

r - 创建具有透明颜色ggplot2的boxplots

r - 带有因子变量输出的 ifelse 语句

r - 如何在 Shiny 应用程序的范围 slider 的每一侧显示不同的颜色?当你在任一侧滑动时,颜色也应该自动填充

r - 如何在 ggplot 中为 map 中的多个图层自定义图例?

c++ - 为什么临时 'Test'没有移动,而只是构造?

r - 打印 dplyr 的过滤功能过滤掉的行数

r - 在 R 中一次生成多个频率表

ruby - #<EventManager :0x007fa4220320c8> (NoMethodError) 的未定义方法 `output_data'

java - 遍历 Java 类中的所有字段