R 查找两个数据集之间的偏移/相位

R 查找两个数据集之间的偏移/相位,r,algorithm,R,Algorithm,我有一个大数据集D,在2D中有(x,y)坐标。我有几乎相同的数据集D’,但有一个恒定的移位,s。也就是说,D’的元素是(x+s,y)。如何以有效的方式计算移位?谢谢r码就太棒了 D'中的每个x值都提供了s的估计值s=x'-x,因此,对s的最佳估计值可能是这些值的平均值 s_est = mean(D'$x - D$x, na.rm = T) 如果y的值在D和D'中相等,则可以使用数据表对y执行联接,对x执行滚动联接 library(data.table) set.seed(1) D <-

我有一个大数据集D,在2D中有(x,y)坐标。我有几乎相同的数据集D’,但有一个恒定的移位,s。也就是说,D’的元素是(x+s,y)。如何以有效的方式计算移位?谢谢r码就太棒了

D'中的每个x值都提供了s的估计值
s=x'-x
,因此,对s的最佳估计值可能是这些值的平均值

s_est = mean(D'$x - D$x, na.rm = T)

如果
y
的值在
D
D'
中相等,则可以使用
数据表对
y
执行联接,对
x
执行滚动联接

library(data.table)
set.seed(1)
D <- data.frame(x = runif(100,1,100), y = runif(100,1,100))
Dprime <- D[sample(1:100,90),]
Dprime$x <- Dprime$x + runif(length(Dprime$x),2.8,3.2)
setDT(Dprime)
setDT(D)
D[,x.original := x]
Dprime[,x.shift := x]
Dprime[D,on=c("y","x"),roll = "nearest"][,.(Shift = x.shift - x.original)][,median(Shift,na.rm=TRUE)]
#[1] 2.997595
库(data.table)
种子(1)

D x和y的班次是相同的还是不同的班次?非常抱歉,谢谢你的提问。移动仅在x方向上。编辑了我的问题。我正在考虑一个数据帧,dat,带有x,y和set_id,然后
lm(x~y+set_id,data=dat)
对不起。这里的
set\u id
是什么?我应该将数据帧转换为集合吗?还有,我认为y来自D',对吗?谢谢。根据
x
进行排序,然后在排序后的
D
中取其
y
坐标等于
y
中第一个点的
y
坐标的第一个点,这两个点都可以工作,但如果多个点可以具有相同的
y
坐标,则可能会出现误报。一个可复制的例子将有助于解决这个问题。我认为这是行不通的。例如,如果
D
的第一个元素是缺失的点之一,则所有元素都会移动,以便将点的
x
坐标与其他点的移动
x
坐标进行比较。另一方面,
mean(D'$x)-mean(D$x)
可能是合理的选择estimate@JohnColeman我不这么认为。这将计算每个
x'-x
,并从平均值中消除缺失的值。当遇到缺失值时,它不会移动。您假设数据知道哪些点缺失。没有理由假设它们将被标记为
NA
你不认为应该首先对
x
进行坐标排序,这样才能起作用吗?如果缺少的部分是原始数据的偏移异常值(可能正是因为它们是异常值——谁知道呢?),那么基于均值的方法可能会有问题。也许
中位数(D'$x)-中位数(D$x)
会更稳健。我不太明白这一点。OP描述了一个从
D
D'
的不断变化,但这似乎有很多变化。我怀疑OP的变化实际上可能涉及一些随机过程。这也可能有助于几年后发现问题并尝试将其应用于问题的人。不管怎样,即使它真的是一个恒定的位移,它也会起作用。这给出了一个平均位移。如果换档为常量,则上述代码给出该换档。无论如何,这必须是统计的,并取决于“最近”滚动的实施方式。但是它解决了这个问题:-)如果所有的y值都相同呢?在这种边缘情况下,不可能反转非恒定偏移(除非偏移量小于x值之间的距离)。出于这个原因,我怀疑有一种解决方案不使用固定的移位,尽管我可能需要研究
roll
的作用。无论如何,它解决了OP的问题,所以+1