GOOGLE ADS

sábado, 30 de abril de 2022

Crear listas con valores de comparaciones entre grupos almacenados dentro de una tabla en R

Tengo un marco de datos como;

Comparison Distance
A,B 2
A,C 30
A,D 32
A,E 34
B,C 31
B,D 40
B,E 5
C,E 2
C,D 6
D,E 7

y tengo dos listas como;

Group_1 <- c("A","B")
Group_2 <- c("C","D","E")

y me gustaría generar tres nuevas listas donde pongo todo lo que hay Comparisonentre el elemento en Group_1y Group_2en List1_G1vsG2, una List2_G1vsG1 con comparación dentro del elemento de Group_1y en List3_G2vsG2 para la comparación dentro de los elementos de Group_1.

Entonces debería obtener las siguientes listas:

Lista1_G1vsG2

c(30,32,34,31,40)

Lista2_G1vsG1

c(2)

Lista3_G2vsG2

c(5,2,6,7)

Aquí está el marco de datos en dput()formato si puede ayudar

structure(list(Comparison = c("A,B", "A,C", "A,D", "A,E", "B,C", 
"B,D", "B,E", "C,E", "C,D", "D,E"), Distance = c(2, 30, 32, 34,
31, 40, 5, 2, 6, 7)), class = "data.frame", row.names = c(NA,
-10L))


Solución del problema

Tal vez esto esté más allá del alcance de su solicitud. Puede personalizar una función de cálculo de matriz de distancia. De esta manera, puede determinar si la distancia entre A y B es igual o no a la de B y A.

f <- function(x, y, dist.df){
pair <- outer(x, y, paste, sep = ",")
dist <- dist.df[[2]][match(pair, dist.df[[1]])]
matrix(dist, length(x), dimnames = list(x, y))
}
f(Group_1, Group_2, df)
# C D E
# A 30 32 34
# B 31 40 5
f(Group_1, Group_1, df)
# A B
# A NA 2
# B NA NA
f(Group_2, Group_2, df)
# C D E
# C NA 6 2
# D NA NA 7
# E NA NA NA

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...