首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个向量上的弦线

一个向量上的弦线
EN

Stack Overflow用户
提问于 2017-01-10 10:38:49
回答 4查看 913关注 0票数 3

我尝试使用stringdist来识别同一向量中最大距离为1的所有字符串,然后发布匹配结果。以下是数据示例:

起始数据帧:

代码语言:javascript
复制
a = c("tom", "tomm", "alex", "alexi", "chris", "jen", "jenn", "michell") 
b = c(NA) 
df = data.frame(a,b) 

预期结果:

代码语言:javascript
复制
a = c("tom", "tomm", "alex", "alexi", "chris", "jen", "jenn", "michell") 
b = c("tomm", "tom", "alexi", "alex", 0, "jenn", "jen", 0) 
df = data.frame(a,b) 

我可以使用stringdist来处理两个向量,但是在使用它来处理一个向量时遇到了问题。感谢你的帮助,R社区。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-01-10 11:11:07

以下是一种可能的方法:

代码语言:javascript
复制
a = c("tom", "tomm", "alex", "alexi", "chris", "jen", "jenn", "michell") 

min_dist <- function(x, method = "cosine", tol = .5){
    y <- vector(mode = "character", length = length(x))
    for(i in seq_along(x)){
        dis <- stringdist(x[i], x[-i], method)
        if (min(dis) > tol) {
            y[i] <- "0"
        } else {
            y[i] <- x[-i][which.min(dis)]
        }
    }
    y
}

min_dist(a, 'cosine', .4)

## [1] "tomm"  "tom"   "alexi" "alex"  "0"      "jenn"  "jen"   "0"
票数 3
EN

Stack Overflow用户

发布于 2017-01-10 11:10:48

您可以使用stringdistmatrixwhich.min

代码语言:javascript
复制
df = data.frame(a,b, stringsAsFactors = FALSE)
mat <- stringdistmatrix(df$a, df$a)
mat[mat==0] <- NA # ignore self
mat[mat>4] <- NA  # cut level
amatch <- rowSums(mat, na.rm = TRUE)>0 # ignore no match
df$b[amatch] <- df$a[apply(mat[amatch,],1,which.min)]
        a     b
1     tom  tomm
2    tomm   tom
3    alex alexi
4   alexi  alex
5   chris  <NA>
6     jen  jenn
7    jenn   jen
8 michell  <NA>
票数 3
EN

Stack Overflow用户

发布于 2017-01-10 13:58:22

我们也可以使用base R中的adist

代码语言:javascript
复制
library(reshape2)
out <- as.data.frame(adist(df$a)) #as.matrix(stringdistmatrix(df[,1])))
out$names <- names(out) <- df$a
out <- subset(melt(out, id='names'), value==1)[1:2]
names(out) <- names(df)
out <- rbind(out, data.frame(a=setdiff(unique(df[,1]), out$a), b='0'))
out
#   a     b
#2     tomm   tom
#9      tom  tomm
#20   alexi  alex
#27    alex alexi
#47    jenn   jen
#54     jen  jenn
#7    chris     0
#8  michell     0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41560251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档