¿Cómo multiplicar columnas de un tibble por filas o columnas correspondientes de otro tibble en R?
Estoy intentando multiplicar columnas de un tibble por filas de otro tibble en R. Intenté usar las funciones sweep
y match
desde aquí, pero solo utiliza un vector (una columna del segundo tibble). Una muestra pequeña de mi primer conjunto de datos se ve así:
tmode | chvalue | purpose | sov | ownership | age16 | joint | atwork | sovtime |
---|---|---|---|---|---|---|---|---|
SHARED | 2.06 | eat | 0 | 0 | 0 | 1 | 0 | 0.12 |
SHARED | 2.19 | eat | 0 | 0 | 0 | 0 | 0 | 0.08 |
WALK | 2.45 | eat | 0 | 1 | 0 | 1 | 0 | 0.02 |
PAY | 2.30 | eat | 0 | 0 | 0 | 0 | 0 | 0.18 |
PAY | 2.09 | eat | 0 | 0 | 0 | 0 | 0 | 0.12 |
ALONE | 1.82 | work | 0 | 0 | 0 | 0 | 0 | 0.03 |
SHARED | 0.2 | work | 0 | 0 | 0 | 1 | 0 | 0.14 |
Y una muestra pequeña del segundo conjunto de datos se ve así:
Expression | ALONE | SHARED | WALK | PAY |
---|---|---|---|---|
sov | -999 | 0 | 1 | 0 |
ownership | -999 | 0 | 1 | 0 |
age16 | -999 | 0 | 1 | 0 |
joint | -999 | 0 | 1 | 0 |
atwork | 1 | 0 | 0 | 0 |
sovtime | 1 | 0 | 0 | 0 |
Los conjuntos de datos reales son muy grandes (1000 filas y 100k columnas). Agradecería si alguien pudiera ayudarme a encontrar la solución.
davy.ai
Para multiplicar columnas de un tibble por filas de otro tibble en R, puedes utilizar la función
mapply
. Aquí hay un código de ejemplo que coincide los nombres de columna de los dos conjuntos de datos y los multiplica:En este código de ejemplo, primero excluimos columnas no numéricas (es decir,
purpose
) dedf1
, y luego utilizamosmutate
,across
ymapply
para multiplicar cada columna dedf1
por su correspondiente fila endf2
. Específicamente, utilizamosmatch
para coincidir los nombres de columna dedf1
(es decir,t_mode
,ch_value
, etc.) con los nombres de fila dedf2
(es decir,sov
,ownership
, etc.), y luego utilizamosmapply
para multiplicar cada valor en la columna dedf1
por su valor correspondiente en la fila dedf2
. Finalmente, excluimos las columnas multiplicadas (es decir, aquellas que terminan con_multiplied
) del resultado.Ten en cuenta que este código asume que los nombres de columna de
df1
coinciden con los nombres de fila dedf2
(excepto por el sufijo_multiplied
), y que no hay columnas/filas faltantes o adicionales. Si tus conjuntos de datos reales tienen estructuras diferentes, es posible que necesites ajustar el código en consecuencia. También ten en cuenta que dado que tus conjuntos de datos reales son muy grandes, este código puede tardar algún tiempo en ejecutarse.