在两列数据框上使用 adist
using adist on two columns of data frame
我想用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]))
它工作正常,但对于我的原始数据集,通过列号调用它是不切实际的,我如何在这个函数中引用列名?
根据 adist
函数定义,x
和 y
参数应该是字符向量。在您的示例中,该函数返回一个 2x2 矩阵,因为它还比较交叉词 "mad" 与 "cat" 和 "car" 与 "mug"。
看看矩阵主对角线就知道了
您可以使用 mapply
来解决这个问题,即
mapply(adist, df$A, df$B)
#[1] 2 1
使用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))
我想用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]))
它工作正常,但对于我的原始数据集,通过列号调用它是不切实际的,我如何在这个函数中引用列名?
根据 adist
函数定义,x
和 y
参数应该是字符向量。在您的示例中,该函数返回一个 2x2 矩阵,因为它还比较交叉词 "mad" 与 "cat" 和 "car" 与 "mug"。
看看矩阵主对角线就知道了
您可以使用 mapply
来解决这个问题,即
mapply(adist, df$A, df$B)
#[1] 2 1
使用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))