gpt4 book ai didi

r - 计算 R 中 "yesterday' s"值的变化?

转载 作者:行者123 更新时间:2023-12-05 04:19:30 25 4
gpt4 key购买 nike

我有关于鸟类个体及其喂食地点的数据。喂食位置会移动,因此我想创建一个变量来计算从昨天的喂食位置到“今天的”喂食选项的距离。

这是一个代表我在说什么的例子。因此,'bird' 列代表鸟类的个体 ID,feedLoc 代表每天可能的喂食地点。然后是该观察的日期。 H(水平)和 V(垂直)表示网格上馈电位置的坐标位置。最后,bp 表示该个体是否在喂食地点被识别。

reprex <- tibble(bird = c("A", "A", "A", "B", "B", "B", "C", "C"),
feedLoc = c("x","y", "x", "x", "y", "x", "y", "z"),
date = as.Date(c("2020-05-10", "2020-05-11", "2020-05-11",
"2020-05-24", "2020-05-25", "2020-05-25",
"2020-05-22", "2020-05-23")),
h = c(100, 123, 45, 75, 89, 64, 99, 101),
v = c(89, 23, 65, 92, 29, 90, 120, 34),
bp = c(1, 1, 0, 1, 0, 1, 1, 0))

产生这个:


# A tibble: 8 × 6
bird feedLoc date h v bp
<chr> <chr> <date> <dbl> <dbl> <dbl>
1 A x 2020-05-10 100 89 1
2 A y 2020-05-11 123 23 1
3 A x 2020-05-11 45 65 0
4 B x 2020-05-24 75 92 1
5 B y 2020-05-25 89 29 0
6 B x 2020-05-25 64 90 1
7 C y 2020-05-22 99 120 1
8 C z 2020-05-23 101 34 0

我的问题是,我想创建一个新变量来计算从昨天的喂食选择(因此,bp == 1 AND date == date - 1 的行)到每只鸟的当前喂食位置选项的距离个人使用坐标数据。我该怎么做?谢谢!

我最初尝试按鸟类和 feedLoc id 分组,按日期排列,然后滞后 h 和 v 变量,这样我就可以使用距离公式计算与昨天的 Ant 群选择的距离。然而,问题是在数据集中,排列时的前一行并不总是完全是“昨天”。

最佳答案

创建一个过滤到 bp == 1 的数据框,将日期加 1 以匹配第二天的行,然后 left_join() 到您的原始数据以进行计算距离:

library(dplyr)

yesterday <- reprex %>%
filter(bp == 1) %>%
transmute(bird, date = date + 1, h.yest = h, v.yest = v)

reprex %>%
left_join(yesterday) %>%
mutate(
dist = sqrt((h - h.yest)^2 + (v - v.yest)^2)
) %>%
select(!h.yest:v.yest)
# A tibble: 8 × 7
bird feedLoc date h v bp dist
<chr> <chr> <date> <dbl> <dbl> <dbl> <dbl>
1 A x 2020-05-10 100 89 1 NA
2 A y 2020-05-11 123 23 1 69.9
3 A x 2020-05-11 45 65 0 60.0
4 B x 2020-05-24 75 92 1 NA
5 B y 2020-05-25 89 29 0 64.5
6 B x 2020-05-25 64 90 1 11.2
7 C y 2020-05-22 99 120 1 NA
8 C z 2020-05-23 101 34 0 86.0

关于r - 计算 R 中 "yesterday' s"值的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74793421/

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