我的表格看起来像
stamp a b expected result (euclidean distance)
1 2 1 (3-2)**2+(1-1)**2
2 3 1 (1-3)**2+(4-1)**2
3 1 4 last one can be default defined
如何根据从第1行到第1行的滚动函数的计算得到预期结果。或者你有其他方法吗?
我想将它与聚合函数一起使用,因此执行此操作的单个函数应该是解决方案。
非常感谢。
答案 0 :(得分:1)
使用您的数据
dd<-read.table(text="stamp a b
1 2 1
2 3 1
3 1 4", header=T)
你可以做点什么
dd$dist<-c(with(dd, sqrt(diff(a)^2 + diff(b)^2)), NA)
获得成对距离
stamp a b dist
1 1 2 1 1.000000
2 2 3 1 3.605551
3 3 1 4 NA
答案 1 :(得分:0)
另一种方法:
dat$dist <- c(diag(as.matrix(dist(dat[2:3]))[-1, -nrow(dat)]), NA)
# stamp a b dist
# 1 1 2 1 1.000000
# 2 2 3 1 3.605551
# 3 3 1 4 NA
其中dat
是数据框的名称。