gpt4 book ai didi

r - 如何在 R 中的数据框中的每个可能的行组合上应用多个函数?

转载 作者:行者123 更新时间:2023-12-04 09:37:01 24 4
gpt4 key购买 nike

我有一个带坐标的数据框(lon,lat)

    lon <- list(505997.627175236, 505997.627175236, 505997.627175236, 505997.627175236)   
lon <- do.call(rbind.data.frame, lon)

lat <- list(7941821.025438220, 7941821.025438220, 7941821.025438220, 7941821.025438220)
lat <- do.call(rbind.data.frame, lat)

coord <- cbind(lon, lat)
colnames(coord) <- c("lon", "lat")

我正在尝试计算数据帧内所有可能的行组合之间的欧几里德距离和角度。
     lon   lat       apply function on every possible combinations such as v1-v2, v1-v3, v1-v4,
v1 x1 y1 v2-v3 and so on...
v2 x2 y2
v3 x3 y3 here are the two functions applied beetween v1 and v2 :
v4 x4 y4 **euclidian distance** sqrt((x1-x2)^2 + (y1-y2)^2)
**angle** atan2((y1-y2),(x1-x2))*(180/pi)

如何在每个可能的行组合上应用多个函数并在各自的列表中获得结果?我的目标是在每次迭代中使用这些计算,无论输入的行数如何。

预先感谢您的回答,如果问题看起来很愚蠢,请见谅。我看了很多帖子,但找不到我可以理解和复制的解决方案。

最佳答案

基本 R 函数 combn生成向量元素的组合 m一次,它可以选择应用一个函数 FUN到那些组合。由于输入数据是 "data.frame" ,我会结合rownames 2 乘 2。

euclidean <- function(k){
f <- function(x, y) sqrt((x[1] - y[1])^2 + (x[2] - y[2])^2)
x <- unlist(coord[k[1], 1:2])
y <- unlist(coord[k[2], 1:2])
f(x, y)
}

angle <- function(k){
f <- function(x, y) atan2(x[2] - y[2], x[1] - y[1])*(180/pi)
x <- unlist(coord[k[1], 1:2])
y <- unlist(coord[k[2], 1:2])
f(x, y)
}

combn(rownames(coord), 2, euclidean)
#[1] 4019.95 800062.50 20012.25 804067.26 24001.87 780073.39

combn(rownames(coord), 2, angle)
#[1] -84.28941 90.71616 87.99547 90.74110 89.28384 -89.21407

数据。

这是 OP 答案中的数据,但没有 id柱子。
lon <- c(505997.627175236, 505597.627175236,
515997.627175236, 505297.627175236)
lat <- c(7941821.025438220, 7945821.025438220,
7141821.025438220, 7921821.025438220)
coord <- data.frame(lon, lat)

关于r - 如何在 R 中的数据框中的每个可能的行组合上应用多个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com