Bienvenido a nuestro sitio, en este lugar vas a hallar la resolución que estabas buscando.
Solución:
El problema descrito no coincide con el título, y las respuestas existentes abordan la parte de columnas móviles, realmente no explica cómo seleccionar las últimas N columnas.
Si solo desea seleccionar las últimas n columnas en una matriz / marco de datos sin conocer los nombres de las columnas:
mydata2[,ncol(mydata2)]
y si quieres las últimas n columnas, prueba
mydata[,(ncol(mydata2)-n-1):ncol(mydata2)]
Un poco engorroso, pero funciona. Podría escribir la función de contenedor si planea usarla regularmente.
Podrías usar algo como esto:
move_to_start <- function(x, to_move)
x[, c(to_move, setdiff(colnames(x), to_move))]
move_to_start(mydata2, c('A', 'B'))
# A B num1 num2
# 1 A B 1 36
# 2 A B 2 37
# 3 A B 3 38
# 4 A B 4 39
# 5 A B 5 40
Alternativamente, si desea mover el último n
columnas al principio:
move_to_start <- function(x, n)
x[, c(tail(seq_len(ncol(x)), n), seq_len(ncol(x) - n))]
move_to_start(mydata2, 2)
# A B num1 num2
# 1 A B 1 36
# 2 A B 2 37
# 3 A B 3 38
# 4 A B 4 39
# 5 A B 5 40
Puede hacer algo similar usando el SOfun
paquete, disponible en GitHub.
library(SOfun)
foo <- moveMe(colnames(mydata2), "A, B before num1")
mydata2[, foo]
# A B num1 num2
#1 A B 1 36
#2 A B 2 37
#3 A B 3 38
#4 A B 4 39
#5 A B 5 40
Puede mover nombres de columna como este ejemplo desde la Ayuda de R.
x <- names(mtcars)
x
#[1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"
moveMe(x, "hp first; cyl after drat; vs, am, gear before mpg; wt last")
#[1] "hp" "vs" "am" "gear" "mpg" "disp" "drat" "cyl" "qsec" "carb" "wt"
Te mostramos comentarios y valoraciones
Puedes avalar nuestro estudio exponiendo un comentario o dejando una valoración te damos las gracias.