数据帧列表上的 areaPolygon() R
areaPolygon() on list of data frames R
包:
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"’
我可以使用 mapply
或 lapply
执行此操作吗?我不知道该怎么做。
与 group_by
分组是一个 dplyr-thing,供 dplyr 函数使用,例如 summarise
,您通常不应期望其他包中的函数会理解它。
您需要的是:
df_list_concat %>%
group_by(name) %>%
summarise(area = areaPolygon(cbind(X1, X2)))
包:
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"’
我可以使用 mapply
或 lapply
执行此操作吗?我不知道该怎么做。
与 group_by
分组是一个 dplyr-thing,供 dplyr 函数使用,例如 summarise
,您通常不应期望其他包中的函数会理解它。
您需要的是:
df_list_concat %>%
group_by(name) %>%
summarise(area = areaPolygon(cbind(X1, X2)))