首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有适用于"c('double',‘数值’)类对象‘概括’的方法。

问没有适用于"c('double',‘数值’)类对象‘概括’的方法。
EN

Stack Overflow用户
提问于 2022-06-25 18:04:43
回答 2查看 703关注 0票数 1

目前,我有一个.csv文件,其中包含与每个地理点相关联的一系列lat/lon点。我想要做的是把这个CSV栅格化,然后用一个多多边形向量层覆盖它,并提取该层中每个多边形的平均值。下面是我使用的完成此任务的代码:

代码语言:javascript
复制
library(choroplethr)
library(choroplethrMaps)
library(ggmap)
library(exactextractr)   #For `exact_extract`
library(matrixStats)     #For `colWeightedMeans`
library(raster)          #For `brick`
library(sf)              #For `st_read`
library(stringr)         #For `str_sub`
library(tidyr)
library(dplyr)
library(RColorBrewer)
library(ncdf4) # package for netcdf manipulation
library(rasterVis)
library(raster) # package for raster manipulation
library(rgdal) # package for geospatial analysis
library(ggplot2) # package for plotting
library(maptools)
library(rgeos)
library(maps)
library(data.table)
library(reshape)
library(doBy)

# TOY .csv file, in real code I load in a much larger file
viirs_2020 <- read.csv(text = "frp, lat, long,
1.43,46.73021,-92.0754,
1.27,46.72907,-92.0775,
1.8,40.72152,-84.1262,
1.23,41.63972,-87.1309,
0.82,41.61905,-87.3285,
1.61,41.64,-87.4095,
1.56,41.64461,-87.141, header=TRUE")

# setting extent + projection for raster data
viirs2020_r <- raster(xmn = -125, xmx = -65, ymn = 15, ymx = 55, res = 0.75, crs = "+proj=longlat +datum=WGS84")

# converting .csv file into a raster
viirs2020_raster <- rasterize(viirs_2020[, c('long', 'lat')], viirs2020_r, viirs_2020[, 'frp'], fun=mean)
plot(viirs2020_raster)

# Load in shapefile which is a grid over a wildfire
cp_grid <- st_read('Drop Effectiveness/data/map data/cameronpeak_grid.shp')

cp_grid <- st_transform(cp_grid, 4269)
cp_grid$id <- factor(cp_grid$id)

#Function for taking the mean of values within shapes in coverage
get_frp = function(values, coverage){
  values %>% summarize(across(everything(), ~ weighted.mean(.x, coverage, na.rm=TRUE)))
}

###extract the averages
out = exact_extract(viirs2020_raster, cp_grid, fun=get_frp, stack_apply=FALSE)

过去,我在不同的项目上成功地使用了带有exact_extract文件的NetCDF函数,成功地做到了这一点。但是,当我试图使用光栅化的.csv文件执行此任务时,我在上面粘贴的代码的最后一行中会出现以下错误:

代码语言:javascript
复制
"in UseMethod("summarise") :
no applicable method for 'summarise' applied to an object of class "c('double', 'numeric')"

有人知道是什么导致了这个错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-05 21:06:52

我无法通过更改我编写的自定义函数来解决这个问题。然而,我能够复制这个过程,首先做一个简单的'exact_extract‘,然后计算之后的加权平均值。

代码语言:javascript
复制
out = exact_extract(viirs2020_raster, cp_grid)

# Create data frame from extraction
frp_combined <- bind_rows(out, .id = "id") %>% 
  as_tibble()

# Create a weighted mean based on values and coverage of raster
frp_by_id <- frp_combined %>% 
  #--- convert from character to numeric  ---#
  mutate(id = as.numeric(id)) %>% 
  #--- group summary ---#
  group_by(id) %>% 
  summarise(frp_aw = sum(value * coverage_fraction) / sum(coverage_fraction))

# Merge extracted values to each polygon
cameronpeak.frp <- cp_grid %>% 
  mutate(id := seq_len(nrow(.))) %>% 
  left_join(., frp_by_id, by = "id") %>%
  dplyr::select(id, frp_aw) 
票数 1
EN

Stack Overflow用户

发布于 2022-07-03 17:21:26

我认为这个问题是因为缺少{{ }}来包装变量名coverage。

尝试以下几点

代码语言:javascript
复制
#Function for taking the mean of values within shapes in coverage
get_frp = function(values, coverage){
  values %>% summarize(across(everything()), ~ weighted.mean(.x, {{coverage}}, na.rm=TRUE))
}

关于这个的更多信息:https://rlang.r-lib.org/reference/topic-metaprogramming.html

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

https://stackoverflow.com/questions/72756233

复制
相关文章

相似问题

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