【问题标题】:areaPolygon() on list of data frames RareaPolygon() 上的数据帧列表 R
【发布时间】:2017-02-03 10:20:59
【问题描述】:

包:

library(geosphere)
library(dplyr)

我有一个这样的数据框列表:

df_list:

[[1]]
  name X1 X2
1    A  1  1
2    A  1  2
3    A  2  2
4    A  2  1

[[2]]
  name X1 X2
1    B  1  1
2    B  1  2
3    B  2  2
4    B  2  1

[[3]]
  name X1 X2
1    C  1  1
2    C  1  2
3    C  2  2
4    C  2  1

我想遍历列表中的每个数据框,并使用 geosphere 包中的 areaPolygon() 计算数据框表示的多边形的面积。我可以对这样的一个数据框执行此操作:

name <- c("A","A","A","A")
X1 <- c(1,1,2,2)
X2 <- c(1,2,2,1)
df <- data.frame(name, X1, X2)

areaPolygon(df[,2:3])

我尝试通过将数据帧列表连接到一个数据帧并按名称分组来使用管道:

df_list_con <- do.call(rbind, df_list)
area <- df_list_concat %>% group_by(name) %>% areaPolygon(.[,2:3])

但它不起作用,给出错误消息:

Error in (function (classes, fdef, mtable)  : 
unable to find an inherited method for function ‘areaPolygon’ for signature ‘"grouped_df"’

我可以使用mapplylapply 执行此操作吗?我不知道该怎么做。

【问题讨论】:

    标签: r loops gis apply


    【解决方案1】:

    使用group_by 分组是一个 dplyr 事物,供 dplyr 函数使用,例如 summarise,您通常不应该期望其他包中的函数能够理解它。

    你需要的是:

    df_list_concat %>% 
        group_by(name) %>% 
        summarise(area = areaPolygon(cbind(X1, X2)))
    

    【讨论】:

      猜你喜欢
      • 2017-06-27
      • 2022-01-10
      • 2021-01-20
      • 1970-01-01
      • 2020-09-11
      • 2015-09-27
      • 2020-06-22
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多