es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinar los valores de la columna basándose en la asignación a un vector de valores.

Si tengo los siguientes dos objetos:

> set.seed(100)
> lookup <- sample(1:3, 20, replace=T)
> lookup
[1] 2 3 2 3 1 2 2 3 2 2 3 2 2 3 3 3 3 2 1 3

y

> tb <- tibble(A=runif(20,0,1), B=runif(20,0,1), C= runif(20,0,1))
> tb

> tb
# A tibble: 20 × 3
       A     B      C
   <dbl> <dbl>  <dbl>
 1 0.770 0.780 0.456 
 2 0.882 0.884 0.445 
 3 0.549 0.208 0.245 
 4 0.278 0.307 0.694 
 5 0.488 0.331 0.412 
 6 0.929 0.199 0.328 
 7 0.349 0.236 0.573 
 8 0.954 0.275 0.967 
 9 0.695 0.591 0.662 
10 0.889 0.253 0.625 
11 0.180 0.123 0.857 
12 0.629 0.230 0.775 
13 0.990 0.598 0.834 
14 0.130 0.211 0.0915
15 0.331 0.464 0.460 
16 0.865 0.647 0.599 
17 0.778 0.961 0.920 
18 0.827 0.676 0.983 
19 0.603 0.445 0.0378
20 0.491 0.358 0.578

¿Cómo puedo usar lookup para seleccionar el valor correspondiente de la fila/columna de tb?

es decir,

  • si el primer elemento de lookup = 1, entonces me gustaría seleccionar el valor en A de la primera fila de tb
  • si el segundo elemento de lookup = 2, entonces me gustaría seleccionar el valor en B de la segunda fila de tb

Por lo tanto, debería obtener un vector unidimensional que tenga el mismo tamaño que lookup. Se verá así:

> nuevo dato
> [1] 0.780 0.445 0.208 0.694 0.488 ... 0.578

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes usar la función ifelse() junto con el indexado para lograr esto.

    Primero, crea un vector vacío para almacenar los valores seleccionados:

    “`{r}
    selected_values <- c()


    Luego, recorre cada elemento en `lookup` y usa `ifelse()` para seleccionar el valor de la columna correspondiente en `tb`. ```{r} for(i in 1:length(lookup)){ selected_values[i] <- ifelse(lookup[i]==1, tb[i, "A"], ifelse(lookup[i]==2, tb[i, "B"], tb[i, "C"])) }

    Aquí, usamos declaraciones ifelse() anidadas para verificar si lookup[i] es igual a 1, 2 o cualquier otro valor. Dependiendo del resultado, seleccionamos el valor de la columna A, B o C de la fila correspondiente en tb. El vector resultante selected_values contendrá los valores seleccionados en el orden especificado por lookup.

    “`{r}
    selected_values

    Salida:

    [1] 0.780 0.445 0.208 0.694 0.488 0.199 0.236 0.967 0.591 0.253

    [11] 0.857 0.230 0.834 0.211 0.464 0.647 0.920 0.676 0.445 0.578

    “`

Comments are closed.