应用函数/公式交叉行

时间:2014-07-22 18:57:03

标签: r

我的表格看起来像

  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行的滚动函数的计算得到预期结果。或者你有其他方法吗?

我想将它与聚合函数一起使用,因此执行此操作的单个函数应该是解决方案。

非常感谢。

2 个答案:

答案 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是数据框的名称。