match() unable to find indexes of values from a dataframe in R
En una función con tres argumentos (es decir, estado, resultado y nums) y el marco de datos se llama df. Aquí está el snippet con el tema:
else if (num == "worst"){
da <- as.numeric(unlist(df[,outcome]))
da <- na.omit(da)
da <- sort(da, decreasing = T)
dm <- match(da, df[,outcome])
print(unique(df[dm, "hospital"]))
}
los valores de da impresos por separado son los siguientes:
[1] 19.0 18.4 17.6 17.3 17.3 17.1 17.1 16.8 16.8 16.7 16.6 16.5 16.5 16.4 16.3 16.3 16.3 16.2 16.2 16.2 16.2 16.2 16.2
[24] 16.2 16.2 16.0 16.0 15.9 15.8 15.8 15.8 15.8 15.8 15.7 15.6 15.6 15.6 15.5 15.4 15.4 15.4 15.3 15.3 15.3 15.3 15.2
[47] 15.2 15.2 15.1 15.1 15.0 15.0 15.0 14.9 14.9 14.9 14.9 14.8 14.7 14.7 14.7 14.7 14.7 14.6 14.5 14.5 14.3 14.3 14.3
[70] 14.2 14.2 14.1 14.1 14.1 14.0 14.0 13.8 13.8 13.6 13.5 13.5 13.3 13.2
estos valores se derivan directamente del marco de datos df original.
al intentar coincidir los valores para extraer los índices usando ♪ variable, aquí está lo que se devuelve:
[1] NA 41 88 14 14 52 52 45 45 58 34 26 26 16 8 8 8 3 3 3 3 3 3 3 3 NA NA 12 36 36 36 36 36 33 9 9 9 60 13
[40] 13 13 53 53 53 53 44 44 44 4 4 NA NA NA 5 5 5 5 85 7 7 7 7 7 89 2 2 38 38 38 18 18 30 30 30 NA NA 71 71
[79] 48 23 23 86 1
la cuestión: por ejemplo, el primer valor de 19.0 a partir de da no se reconoce en ♪, aunque ese valor se deriva de la misma base de datos de df. ¿Puede alguien explicarme cuál es el problema y cómo puedo identificar las variables que faltan para recuperar los valores índice para imprimir filas específicas basadas en los valores índice.
NOTAYa he intentado cambiar. which(x %in% y)
método:
da <- sort(da, decreasing = T)
dm <- which(df[,outcome] %in% da)
pero eso sólo da esto como una salida:
[1] 1 2 3 4 5 7 8 9 10 12 13 14 15 16 17 18 20 22 23 24 25 26 27 30 31 32 33 34 35
[30] 36 37 38 39 40 41 43 44 45 46 47 48 49 52 53 55 56 57 58 59 60 61 62 63 64 65 66 68 70
[59] 71 72 73 74 75 77 79 81 83 84 85 86 88 89 91 105 111
Gracias por su ayuda.
dput link https://pastelink.net/2e8tm
Pregunta hecha hace 3 años, 4 meses, 28 días - Por codecrusaderx
2 Respuestas:
-
El problema principal que estás experimentando es que la función
match()
está buscando coincidencias exactas entre los valores enda
ydf[,outcome]
, pero los valores enda
están siendo redondeados a un decimal mientras que los valores endf[,outcome]
tienen más precisión. Por lo tanto, no se encuentran coincidencias exactas y se obtienen valoresNA
o índices incorrectos al intentar hacer coincidir los valores.Para resolver este problema, puedes redondear los valores en
df[,outcome]
para que coincidan con los valores enda
antes de intentar hacer coincidirlos. Aquí te muestro cómo puedes hacer esto en tu código:R else if (num == "worst"){ da <- as.numeric(unlist(df[,outcome])) da <- na.omit(da) da <- sort(da, decreasing = T)
Redondear los valores en df[,outcome] para que coincidan con da
df_rounded <- round(df[,outcome], 1) dm <- match(da, df_rounded) print(unique(df[dm, "hospital"])) }Al redondear los valores en
df[,outcome]
antes de intentar hacer coincidirlos con los valores enda
, deberías obtener los índices correctos y poder imprimir las filas específicas basadas en los valores índice correctamente.Espero que esta solución te ayude a resolver el problema. ¡Avísame si tienes alguna otra pregunta!
Respondida el Dec 19, 2020 a las 14:24 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema con tu código es que estás intentando hacer coincidir los valores de
da
con la columnaoutcome
del marco de datosdf
, peroda
es una lista de valores numéricos ydf[, outcome]
es una columna de cadenas. Para quematch()
funcione correctamente, ambos argumentos deben ser del mismo tipo.Para resolver este problema, puedes convertir la columna
outcome
a numérico antes de intentar hacer coincidir los valores:r da <- as.numeric(unlist(df[,outcome])) da <- na.omit(da) da <- sort(da, decreasing = T) df[, "outcome"] <- as.numeric(df[, "outcome"]) dm <- match(da, df[,outcome]) print(unique(df[dm, "hospital"]))
También puedes utilizar la función
which()
para encontrar los índices de los valores coincidentes:r da <- as.numeric(unlist(df[,outcome])) da <- na.omit(da) da <- sort(da, decreasing = T) dm <- which(df[,outcome] %in% da) print(unique(df[dm, "hospital"]))
Espero que esto resuelva tu problema.
Respondida el Dec 19, 2020 a las 14:25 - por Gemini
Votos positivos: 0 | Votos negativos: 0