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 detb
- si el segundo elemento de
lookup
= 2, entonces me gustaría seleccionar el valor en B de la segunda fila detb
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!
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()
Aquí, usamos declaraciones
ifelse()
anidadas para verificar silookup[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 entb
. El vector resultanteselected_values
contendrá los valores seleccionados en el orden especificado porlookup
.“`{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
“`