【发布时间】:2021-08-24 14:22:09
【问题描述】:
我有一个这样的日期框架
individual <- c("1",NA,NA,NA,NA,NA,NA,NA,"1","1")
x <- c(665,NA,NA,NA,NA,NA,NA,NA,663,665)
y <- c(-474.5,NA,NA,NA,NA,NA,NA,NA,-474.5,-472.5)
frame <- rep(1:10)
df <- data.frame(individual,x,y,frame)
我有一个标有“个人”的 ID 列、xy 坐标和帧号。
我需要计算行之间但在 NA 值上的 x,y 坐标的欧几里得距离。
因此,在我给出的示例中 - 我需要计算第 1 行和第 9 行以及第 10 行和第 9 行之间的距离。在实际数据中,当然会有更多的行。
最终我需要做的是对数据进行插值,这样如果欧几里德距离5,则忽略不插值。
这是所需的示例结果数据框:
individual <- c("1","1","1","1","1","1","1","1","1","1")
x <- c(665,NA,NA,NA,NA,NA,NA,NA,663,665)
y <- c(-474.5,NA,NA,NA,NA,NA,NA,NA,-474.5,-472.5)
frame <- rep(1:10)
dist_measure <- c(NA,NA,NA,NA,NA,NA,NA,NA,2,2.828427)
df <- data.frame(individual,x,y,frame,dist_measure)
非常感谢任何有关解决此问题的方法的建议。我的第一个想法是拥有一个计算欧几里得距离并将其放入 for 循环的函数。但是我有点坚持如何在 NA 值上进行处理。我认为以某种方式在 tidyverse 中使用 lag 函数会有所帮助,但又不确定如何将其集成到循环/函数中。
提前谢谢你。
【问题讨论】:
-
将data.frame命名为
data.frame是个坏主意。请改用df或my_data_frame。 -
公平点,已修复 - 谢谢
-
如果有更多的人,您如何识别可能属于每个人的
NA值?例如,frame在个体中是否始终如一地变化?是否总是存在第一个和最后一个观察值,并且介于两者之间的所有内容都可能归因于同一个人? -
好点,应该更清楚。在给定的框架内可以有多个人。所以第 1 帧可能有多个个体,因此第 1 帧有 2 行,依此类推。有时每个个体可能只有 1 个观察值,因此只有第一个观察值,没有最后一个观察值。这些也将被忽略,因为中间不会有任何插值(这很好)。
-
@cebola 好的,所以我认为问题仍然存在,您如何识别可能基于距离插值的数据“块”?它会是那个人的第一个和最后一个观察值之间的所有值吗?