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 Comparison
entre el elemento en Group_1
y Group_2
en List1_G1vsG2, una List2_G1vsG1 con comparación dentro del elemento de Group_1
y 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