软件包:
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"’
我可以使用mapply
或lapply
执行此操作吗?我不知道该怎么做。
答案 0 :(得分:0)
使用group_by
进行分组是一个dplyr-thing,由summarise
之类的dplyr函数使用,你不应该期望其他包中的函数能理解它。
您需要的是:
df_list_concat %>%
group_by(name) %>%
summarise(area = areaPolygon(cbind(X1, X2)))