dataPolygon()在数据帧列表R上

时间:2017-02-03 10:21:00

标签: r loops gis apply

软件包:

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

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

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执行此操作吗?我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

使用group_by进行分组是一个dplyr-thing,由summarise之类的dplyr函数使用,你不应该期望其他包中的函数能理解它。

您需要的是:

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