我想使用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,我编写如下代码。
sample.matrix<-matrix(c(1:33635,ncol=35)
paralleldist(x=sample.mtarix,method="dtw")
错误:出现意外符号: “ sample.matrix <-matrix(c(1:33635,ncol = 35) paralleldist”
答案 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创建