Encuentra la distancia entre grupos de cadenas en R.
Tengo un conjunto de datos muy grande que se ve así.
Tengo dos tipos de marcos de datos:
1. mi marco de datos de referencia
ref=c("cake","brownies")
y mi marco de datos experimental
expr=c("cak","cakee","cake", "rownies","browwnies")
Quiero comparar los marcos de datos ref y expr y encontrar la distancia de Levenshtein entre ellos. La salida podría verse así…
ref expr distancia
cake cak 1
cake cakee 1
cake cake 0
cake rownies ...
Después de haber medido su distancia de Levenshtein, quiero agrupar cualquier cadena que tenga una distancia menor a 3 en un clúster y que mis datos se vean así…
ref expr distancia clúster
cake cak 1 1
cake cakee 1 1
cake cake 0 1
brownies rownies 1 2
brownies browwnies 1 2
Se agradece cualquier ayuda o consejo sobre cómo proceder. En este momento estoy probando muchos paquetes de R para encontrar la distancia entre marcos de datos, como
library("DescTools")
pero no parecen funcionar bien.
davy.ai
Para hacer coincidir los marcos de datos de referencia y experimental y encontrar la distancia de Levenshtein entre ellos, puedes usar la función
stringdistmatrix()
del paquetestringdist
. Puedes especificar el método como “lv” para calcular la distancia de Levenshtein. Aquí te muestro cómo puedes hacerlo:“`{r}
library(stringdist)
ref <- c(“cake”, “brownies”)
expr <- c(“cak”, “cakee”, “cake”, “rownies”, “browwnies”)
Calcula la matriz de distancias
dist_mat <- stringdistmatrix(ref, expr, method = “lv”)
Convierte la matriz en un marco de datos
dist_df <- as.data.frame(as.table(dist_mat))
Renombra las columnas
names(dist_df) <- c(“ref”, “expr”, “distance”)
Muestra el resultado
dist_df
1 cake cak 1
2 brownies browwnies 2
3 cake cakee 1
4 brownies rownies 3
5 cake cake 0
Esto te dará el resultado deseado:
Ten en cuenta que el umbral de distancia de 3 es arbitrario y es posible que necesites ajustarlo según tus datos.