如何在R语言中对42个XY坐标轨迹下采样至11个点?
R语言实现轨迹坐标下采样的方法
你需要将42组XY轨迹坐标下采样为11组,R语言里有多种实用方案可以实现:
先修正数据问题
你的X坐标向量存在一处语法错误:-0.63-0.64会被解析为-1.27,导致向量长度不符,修正后的数据如下:
x <- c(1.07,0.98,0.90,0.81,0.73,0.65,0.57,0.49,0.41,0.33,0.25,0.17,0.1,0.01,-0.06, -0.14,-0.21,-0.28,-0.36,-0.43,-0.49,-0.54,-0.59,-0.63,-0.66,-0.69,-0.72,-0.73, -0.72,-0.70,-0.67,-0.64,-0.61,-0.63,-0.64,-0.65,-0.65,-0.65,-0.65,-0.66,-0.66, -0.64) y <- c(-0.11,-0.09,-0.10,-0.12,-0.13,-0.14,-0.19,-0.21,-0.22,-0.24,-0.26,-0.28,-0.30, -0.32,-0.34,-0.37,-0.41,-0.45,-0.50,-0.55,-0.61,-0.68,-0.76,-0.84,-0.92,-1.00, -1.08,-1.18,-1.28,-1.38,-1.47,-1.56,-1.61,-1.67,-1.73,-1.79,-1.85,-1.91,-1.96, -2.02,-2.07)
方法1:基础R均匀索引采样
适合要求严格按原始间隔选点的场景:
# 生成11个均匀分布的索引 sample_idx <- round(seq(1, length(x), length.out = 11)) # 提取下采样后的坐标 x_down <- x[sample_idx] y_down <- y[sample_idx] # 查看结果 cbind(x_down, y_down)
方法2:插值法下采样(平滑轨迹)
如果需要更平滑的轨迹效果,用基础R内置的approx函数做线性插值生成指定数量的点:
# 用序列索引模拟轨迹的时间步 t <- 1:length(x) # 插值生成11个点 downsampled <- approx(t, cbind(x, y), n = 11) # 提取结果 x_down <- downsampled$y[,1] y_down <- downsampled$y[,2] # 查看结果 cbind(x_down, y_down)
方法3:tidyverse生态下的采样
若习惯使用dplyr,可将数据转为数据框后操作:
library(dplyr) # 转为带索引的数据框 traj_df <- tibble(x = x, y = y, idx = 1:n()) # 均匀选取11个点 downsampled_df <- traj_df %>% slice(round(seq(1, n(), length.out = 11))) # 提取坐标 x_down <- downsampled_df$x y_down <- downsampled_df$y
内容的提问来源于stack exchange,提问作者user20003920
相关产品推荐
相关产品推荐

