我想使用adist来计算每行中两列值之间的编辑距离。
我以这种方式或多或少地使用它:
A <- c("mad","car")
B <- c("mug","cat")
my_df <- data.frame(A,B)
my_df$dist <- adist(my_df$A, my_df$B, ignore.case = TRUE)
my_df <- my_df[order(dist),]
最后两行与我的情况相同,但实际数据框看起来有点不同 - 原始数据框的列是字符类型,而不是因子。此外,dist列似乎返回为2列矩阵,我不知道它为什么会发生。
更新: 我读了一下,发现我需要在行上应用它,所以我的新代码如下:
apply(my_df, 1, function(d) adist(d[1], d[2]))
它运行正常,但是对于我的原始数据集,按列号调用它是不切实际的,如何在此函数中引用列名?
答案 0 :(得分:3)
使用tidyverse
方法,您可以使用以下代码:
library(tidyverse)
A <- c("mad","car")
B <- c("mug","cat")
my_df <- data.frame(A,B)
my_df %>%
rowwise() %>%
mutate(Lev_dist=adist(x=A,y=B,ignore.case=TRUE))
答案 1 :(得分:1)
根据adist
函数定义,x
和y
参数应该是字符向量。在你的例子中,函数返回一个2x2矩阵,因为它还将交叉词“mad”与“cat”和“car”与“mug”进行比较。
只需看看矩阵主对角线。
答案 2 :(得分:1)
您可以使用data={"name":"xyz","age":12}
year=2017
month=10
class TestModel(models.Model):
year = models.IntegerField()
month = models.IntegerField()
customer = "In this feild i want to store above dictonary"
来解决这个问题,即
EmbeddedDictField