Soy nuevo en R y estaba buscando una forma de sumar valores de filas enteras mientras usaba el valor más alto entre dos columnas específicas.

Por ejemplo,

set.seed(42)
df <- data.frame(a = sample(0:20,5),
             b = sample(0:20,5),
             c = sample(0:20,5),
             d = sample(0:20,5),
             e = sample(0:20,5),
             f = sample(0:20,5),
             g = sample(0:20,5))
print(df)

   a  b  c  d  e  f  g
1 19 10  9 19 18 10 15
2 18 14 14 20  2  7 16
3  5  2 17  2 20 17  7
4 14 11  4  8 17  8 12
5 10 17  7  9  1 14  0

Ahora lo que quería es calcular para cada fila

A + b + c + (lo que sea más alto entre d y e) + (lo que sea más alto entre f y g)

Estoy familiarizado con rowSums, pero no sé cómo agregar la condición mencionada anteriormente

Gracias de antemano

r
3
Firebolt 28 dic. 2019 a las 23:13

2 respuestas

La mejor respuesta

Podemos usar pmax para obtener el valor máximo para el subconjunto de columnas por fila y agregar con el resto

library(dplyr)
df %>% 
   mutate(new = a + b + c + pmax(d, e) + pmax(f, g))
1
akrun 28 dic. 2019 a las 20:15

Un método data.table:

library(data.table)
setDT(df)[, new := a + b + c + pmax(d, e) + pmax(f, g)]
1
Khaynes 28 dic. 2019 a las 23:28