R 中的平滑定向 (angular) 数据
Smoothing directional (angular) data in R
我正在尝试处理一些 motion analysis
软件跟踪错误 数据导出后。对于某些帧,方向从 "true" 方向旋转 180 度。
我想对数据集进行平滑处理,以便当方向在单帧中改变 ~180 时,它会被转换以反映实际角度。
是否有人知道使用 R
语言(例如 CircStats
中的任何循环统计数据包来解决此问题的方法?或者,我可以想象一个脚本检查帧与帧之间的变化是否接近 180 度,如果为真则减去 180,然后移动到下一帧。这听起来像是一种合理的方法吗?是否可以轻松地在 R 中实现?
恐怕我没有代表上传描述问题的图表(很容易看到),但here是一个示例数据集。
感谢您的帮助。我一直是 stack overflow 的长期用户,但在需要询问之前从未找不到我的答案。
大卫
编辑 - 附上图片
这是一个需要解决的有趣问题!它需要迭代,因为每当更改一个值时,它可以解决一个问题但会产生另一个问题...让我知道它是否有效。
threshold <- 90
correction <- 180
dat <- read.table("angle_data.txt", header=TRUE)
dat <- ts(dat)
repeat {
diffs <- dat - lag(dat, k = 1)
probl <- which(abs(diffs[,2]) > threshold)
if(length(probl)==0)
break
obs.1 <- dat[probl[1], 2]
obs.2 <- dat[probl[1] + 1, 2]
dat[probl[1] + 1, 2] <- obs.2 + sign(obs.1 - obs.2) * 180
}
我正在尝试处理一些 motion analysis
软件跟踪错误 数据导出后。对于某些帧,方向从 "true" 方向旋转 180 度。
我想对数据集进行平滑处理,以便当方向在单帧中改变 ~180 时,它会被转换以反映实际角度。
是否有人知道使用 R
语言(例如 CircStats
中的任何循环统计数据包来解决此问题的方法?或者,我可以想象一个脚本检查帧与帧之间的变化是否接近 180 度,如果为真则减去 180,然后移动到下一帧。这听起来像是一种合理的方法吗?是否可以轻松地在 R 中实现?
恐怕我没有代表上传描述问题的图表(很容易看到),但here是一个示例数据集。
感谢您的帮助。我一直是 stack overflow 的长期用户,但在需要询问之前从未找不到我的答案。
大卫
编辑 - 附上图片
这是一个需要解决的有趣问题!它需要迭代,因为每当更改一个值时,它可以解决一个问题但会产生另一个问题...让我知道它是否有效。
threshold <- 90
correction <- 180
dat <- read.table("angle_data.txt", header=TRUE)
dat <- ts(dat)
repeat {
diffs <- dat - lag(dat, k = 1)
probl <- which(abs(diffs[,2]) > threshold)
if(length(probl)==0)
break
obs.1 <- dat[probl[1], 2]
obs.2 <- dat[probl[1] + 1, 2]
dat[probl[1] + 1, 2] <- obs.2 + sign(obs.1 - obs.2) * 180
}