vertebral tablas son sintomas separar seleccionar paquete mutate lumbar libreria library las inflamados imagenes hernia funcion formato filtros enfermedades discos disco discal deformidades cuáles columnas columna causas arrange r dplyr

tablas - separar columnas r



R mueve la columna al último usando dplyr (5)

Como no hay una solución preparada para esto en dplyr, puede definir su propia pequeña función para que lo haga por usted:

move_last <- function(DF, last_col) { match(c(setdiff(names(DF), last_col), last_col), names(DF)) }

Luego puede usarlo fácilmente en una llamada de select normal:

mtcars %>% select(move_last(., "mpg")) %>% head()

También puedes mover varias columnas al final:

mtcars %>% select(move_last(., c("mpg", "cyl"))) %>% head()

Y aún puede proporcionar otros argumentos para seleccionar, por ejemplo, para eliminar una columna:

mtcars %>% select(move_last(., "mpg"), -carb) %>% head()

Para un data.frame con n columnas, me gustaría poder mover una columna desde cualquiera de las posiciones 1- (n-1) , para ser la columna nth (es decir, una columna no última para ser la última columna). También me gustaría hacerlo usando dplyr . Me gustaría hacerlo sin simplemente escribir los nombres de todas las columnas.

Por ejemplo:

data<-data.frame(a=1:5, b=6:10, c=11:15)

Esto funciona, pero no es la manera dplyr :

data[,c(colnames(data)[colnames(data)!=''b''],''b'')]

Esta es la forma dplyr de hacer la columna b primero:

data%>%select(b, everything())

Pero esto no funciona para que la columna b última:

data%>%select(everything(), b)

Esto funciona, pero requiere que escriba todas las columnas:

data%>%select(a,c,b)

Entonces, ¿hay una manera elegante de hacer esto?

Preguntas relacionadas:


Después de algunos retoques, lo siguiente funciona y requiere muy poca escritura.

data%>%select(-b,b)


Podemos usar

data %>% select(-one_of(''b''), one_of(''b'')) # a c b #1 1 11 6 #2 2 12 7 #3 3 13 8 #4 4 14 9 #5 5 15 10

O

data %>% select(matches("[^b]"), matches("b"))

o con el select_

data %>% select_(.dots = c(setdiff(names(.), ''b''), ''b'')) # a c b #1 1 11 6 #2 2 12 7 #3 3 13 8 #4 4 14 9 #5 5 15 10


df <-df [, c (que (nombres de grupo (df)! = "YourColumnName"), que (nombres de usuario (df) == "YourColumnName"))]


data%>%select(-b,everything())

moverá la variable b hasta el final.

Esto se debe a que una variable negativa en la primera posición de select provoca un comportamiento especial de select (), que es insertar todas las variables. Luego elimina b, y luego se vuelve a agregar con la parte de todo ().

Explicado por el propio Hadley: https://github.com/tidyverse/dplyr/issues/2838

También vea esta otra respuesta para ver otros ejemplos de cómo mover algunas columnas al final y otras al principio: ¿Cómo funciona la función auxiliar de selección de dplyr todo () se diferencia de copiar?