首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有适用于"c('integer','numeric')“类的对象的”mutate_“方法

没有适用于"c('integer','numeric')“类的对象的”mutate_“方法
EN

Stack Overflow用户
提问于 2018-09-19 05:06:11
回答 1查看 9.4K关注 0票数 2

我的总体目标是使用随机森林对图像进行分类。dataframe包含训练数据;其中'landcover‘包含类0、1和2。我正在尝试通过使用dplyr transmute()方法将所有2更改为0来减少类的数量。除了关键的最后一行-- GP_training1 <- transmute(GP_data$landcover, landcover = ifelse(landcover==1,1,0))之外,整个代码都可以正常工作。当我运行这段代码时,我得到了这样的错误:没有适用于“c(‘整数’,‘数值’)”类的对象的'mutate_‘方法。你知道为什么会这样吗?下面粘贴了相关代码。

代码语言:javascript
运行
复制
#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不是很熟悉,但这可能是错误发生的地方吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-19 07:04:43

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

这与您使用的代码不同,但它做的是您的注释所说的:

代码语言:javascript
运行
复制
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只保留您创建的变量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52394592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档