Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中反复运行欧氏距离_R - Fatal编程技术网

如何在R中反复运行欧氏距离

如何在R中反复运行欧氏距离,r,R,如果我有一个像这样的R文件 dput(filename) structure(list(word = structure(c(2L, 1L), .Label = c("frq", "ocr_avg"), class = "factor"), abeja = c(98, 24), abeja.1 = c(26.666, 3), abrigo = c(53.333, 6), abrigo.1 = c(50, 1), abrigo.2 = c(83.809, 21), abrigo.3 = c(

如果我有一个像这样的R文件

dput(filename)
structure(list(word = structure(c(2L, 1L), .Label = c("frq", 
"ocr_avg"), class = "factor"), abeja = c(98, 24), abeja.1 = c(26.666, 
3), abrigo = c(53.333, 6), abrigo.1 = c(50, 1), abrigo.2 = c(83.809, 
21), abrigo.3 = c(31.666, 6)), .Names = c("word", "abeja", "abeja.1", 
"abrigo", "abrigo.1", "abrigo.2", "abrigo.3"), row.names = c(NA, 
-2L), class = "data.frame")

#      word abeja abeja.1 abrigo abrigo.1 abrigo.2 abrigo.3
# 1 ocr_avg    98  26.666 53.333       50   83.809   31.666
# 2     frq    24   3.000  6.000        1   21.000    6.000
我想计算同名配对之间的欧几里德距离,例如(abeja&abeja.1),然后(abrigo&abrigo.1)和(abrigo&abrigo.2)以及(abrigo&abrigo.3)。但也介于(abrigo.1和abrigo.2)和(abrigo.2和abrigo.3)之间

有没有一种方法可以自动完成这项工作,这样我就不必逐一检查每一对,然后自己在R中完成(这是一个相当大的文件)

我自己做这件事的方式是这样的:

x <- filename$abeja
y <- filename$abeja.1 
dist(rbind(x,y))

x
mystring Hi,所以我今天有更多的时间查看输出,对于其中包含另一个单词的单词,它会将它们配对在一起。例如“ente”和“fuente”。是否可以添加任何内容使其不会执行此操作?请尝试使用
starts\u with
代替
contains
。我也会编辑我的答案,这样做。
mystring <- names(filename)

library(stringr)

# take the common patterns
strUniq <- unique(ifelse(str_detect(mystring, '\\.'), 
                         str_sub(mystring, 1, str_locate(mystring, '\\.')[,1] -1), 
                         mystring))
strUniq

# [1] "word"   "abeja"  "abrigo"

library(dplyr)
outp <- lapply(strUniq, function(x) select(filename, starts_with(x)))
outp

# [[1]]
#      word
# 1 ocr_avg
# 2     frq
#
# [[2]]
#   abeja abeja.1
# 1    98  26.666
# 2    24   3.000
#
# [[3]]
#   abrigo abrigo.1 abrigo.2 abrigo.3
# 1 53.333       50   83.809   31.666
# 2  6.000        1   21.000    6.000

lapply(outp, function(x) dist(t(x)))

# [[1]]
# dist(0)
#
# [[2]]
#            abeja
# abeja.1 74.36087
#
# [[3]]
#             abrigo  abrigo.1  abrigo.2
# abrigo.1  6.009067                    
# abrigo.2 33.967434 39.281656          
# abrigo.3 21.667000 19.003567 54.257649
#
# Warning message:
# In dist(t(x)) : NAs introduced by coercion