如何使用R计算数据表中多个点系列之间的距离?

时间:2019-06-03 16:07:23

标签: r

我想使用R计算系列中多行之间的距离。 有967 X 35数据表。 表数组如下。

1. 6.23  3.3   4.36  3.9    ----  4.50   1.50  3.35   (35 column)
2. 5.00  2.3   3.36  4.39   ----  2.52   3.40  2.37   (35 column)
3. 5.23  2.6   5.64  4.23   ----  3.50   4.55  3.48   (35 column)

如果我想计算每行的每个单元格之间的距离怎么办? 例如,假设我要计算第1行和第2行之间的距离/第2行和第3行之间的距离,依此类推。

然后,用于计算距离的数学公式将为... {(6.23-5)^2 +(3.3-2.3)^2+(4.36-3.36)^2+(3.9-4.39)^2+------- + (4.5-2.52)^2+(1.5-3.4)^2+(3.35-2.37)^2}的平方根,并将对其他两行(1-2行,2-3行,3-4行,.....,967-1行(967次))进行相同的计算

但是我不知道如何在R中编写这种方法。

我上传了数据表。 (称为“ R_skills”)

然后使用R,我编写如下代码。

  1. 'Read.xlsx(R_skills)' 2。sample.matrix<-matrix(c(1:33635,ncol=35)
  2. paralleldist(x=sample.mtarix,method="dtw")
  

错误:出现意外符号:   “ sample.matrix <-matrix(c(1:33635,ncol = 35)   paralleldist”

2 个答案:

答案 0 :(得分:2)

这应该为您做到:

sapply(1:(nrow(dt)-1),function(t,dt){dist(dt[t:(t+1),])},dt)

答案 1 :(得分:0)

@tushaR正确地适用于基数R。:)

mat <- sample.matrix <- matrix(1:33635,ncol=35)

dist_fun <- function(x, y) sqrt(sum(x-y)**2)

s_fun <- function(t){
        sapply(t, function(x) dist_fun(mat[x,], mat[x+1]) )
}
m_fun <- function(t){
        mapply(function(x) dist_fun(mat[x,], mat[x+1]), t)
}
a_fun <- function(t){
        apply(matrix(t, nrow = 1), 2, function(x) dist_fun(mat[x,], mat[x+1]) )
}
l_fun <- function(t){
        unlist( lapply(as.list(t, nrow = 1), function(x) dist_fun(mat[x,], mat[x+1]) ) )
}

# t <- 1:(nrow(mat)-1)
# s_fun( 1:(nrow(mat)-1) )

library(microbenchmark)
n <- 1e5 # 961
mat <- sample.matrix <- matrix(1:(35*n),ncol=35)

microbenchmark("sapply" = s_fun(1:(nrow(mat)-1)),
               "mapply" = m_fun(1:(nrow(mat)-1)),
               "apply" = a_fun(1:(nrow(mat)-1)),
               "lapply" = l_fun(1:(nrow(mat)-1)),
               list = NULL, times = 100L, unit = "ms", check = NULL,
               control = list(), setup = NULL)
#> Unit: milliseconds
#>    expr      min       lq     mean   median       uq      max neval
#>  sapply 315.5892 413.6667 534.0462 498.0186 600.1315 1096.092   100
#>  mapply 313.7013 441.9728 534.9250 505.3026 577.5770 1167.973   100
#>   apply 387.1655 503.9833 615.6288 563.4751 665.4584 1571.387   100
#>  lapply 309.3762 416.0796 553.0482 491.5356 645.2026 1823.269   100

reprex package(v0.2.1)于2019-06-04创建