Cómo crear nuevas columnas en base a los valores de otras columnas utilizando R

votos
1

Tengo una trama de datos (DF) en r, y estoy interesado en dos columnas, df df $ IZQUIERDA y DERECHA $. Me gustaría crear dos nuevas columnas de tal manera que en df $ MEJOR tengo el menor número entre izquierda y derecha de cada fila. Análogamente, quiero crear la columna df $ PEOR donde se almacena el número más pequeño.

ID LEFT RIGHT
1  20   70
2  65   15
3  25   65

Me gustaría obtener esto:

ID LEFT RIGHT BEST WORST
1  20   70    20   70
2  65   15    15   65
3  25   65    25   65

¿Cómo puedo hacer eso?

Publicado el 19/09/2018 a las 17:03
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Una alternativa es usar apply

> df$WORST <- apply(df[,-1], 1, min)
> df$BEST <- apply(df[,-1], 1, max)
> df
  ID LEFT RIGHT WORST BEST
1  1   20    70    20   70
2  2   65    15    15   65
3  3   25    65    25   65

Utilizando el enfoque de @ akrun con transform:

> transform(df,
            WORST =  apply(df[,-1], 1, min),
            BEST = apply(df[,-1], 1, max))
Respondida el 19/09/2018 a las 17:06
fuente por usuario

votos
1

Podemos utilizar pmin/pmaxpara obtener el mínimo correspondiente, los valores máximos de las dos columnas

transform(df, BEST = pmin(LEFT, RIGHT), WORST = pmax(LEFT, RIGHT))
#  ID LEFT RIGHT BEST WORST
#1  1   20    70   20    70
#2  2   65    15   15    65
#3  3   25    65   25    65

datos

df <- structure(list(ID = 1:3, LEFT = c(20L, 65L, 25L), RIGHT = c(70L, 
  15L, 65L)), class = "data.frame", row.names = c(NA, -3L))
Respondida el 19/09/2018 a las 17:04
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more