[R-es] Resultado operación entre dataframes
Marcelino de la Cruz Rot
m@rce||no@de|@cruz @end|ng |rom urjc@e@
Mie Mar 15 09:41:59 CET 2023
Buenos días, David:
Lo que está pasando es que estás restando el primer valor de df_2 a
todos los valores de la primera fila de df_1, el 2º valor a la 2ª fila,
y así sucesivamente.
Lo más fácil en este caso sería usar la función apply(). Por ejemplo:
t( apply(df_1[,cols], MARGIN=1, FUN= function(x) x - (df_2$valor)))
# o, de forma resumida, sin nombrar los argumentos
t( apply(df_1[,cols], 1, function(x) x - (df_2$valor)))
# O si quieres el resultado en el mismo orden que en la matriz original
t( apply(df_1[,cols], 1, function(x) x - (df_2$valor)))[,names(df_1)]
Un saludo,
Marcelino
El 14/03/2023 a las 20:45, David Camilo Gomez Medina escribió:
> Buen día estimados,
>
> Tengo el siguiente código:
>
> df_1 <- data.frame(ana = c(15, 20, 30), maria = c(15,20,30), jose = c(15,
> 20, 30))
>
> df_2 <- data.frame(nombre = c("jose", "ana", "maria"), valor = c(1,2,3))
>
> # Find the corresponding columns in df_1 based on the values in df_2$nombre
> cols <- match(df_2$nombre, names(df_1))
>
> # Subtract the values of df_2$valor from the corresponding columns of df_1
> df_1[,cols] <- df_1[,cols] - (df_2$valor)
>
> # Print the resulting data frame
> df_1
>
> y mi resultado es el siguiente:
>
> ana maria jose
> 1 14 14 14
> 2 18 18 18
> 3 27 27 27
>
> Pero el resultado debería ser:
>
> ana maria jose
> 1 13 12 14
> 2 18 17 19
> 3 28 27 29
>
> ¿Saben qué podría estar pasando?
>
> Quedo muy atento, gracias.
>
--
Marcelino de la Cruz Rot
Depto. de Biología y Geología
Física y Química Inorgánica
Universidad Rey Juan Carlos
Móstoles España
Más información sobre la lista de distribución R-help-es