Move a column to first position in a data frame

前端 未结 8 1510
别那么骄傲
别那么骄傲 2020-12-22 23:30

I would like to have the last column of the data frame moved to the start (as first column). How can I do it in R?

My data.frame has about a thousand columns to chan

相关标签:
8条回答
  • 2020-12-22 23:53

    Dplyr's select() approach

    Moving the last column to the start:

    new_df <- df %>%
      select(last_column_name, everything())
    

    This is also valid for any column and any quantity:

    new_df <- df %>%
      select(col_5, col_8, everything())
    

    Example using mtcars data frame:

    head(mtcars, n = 2)
    #                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    
    # Last column is 'carb'
    new_df <- mtcars %>% select(carb, everything())
    
    head(new_df, n = 2)
    #                   carb  mpg cyl disp  hp drat    wt  qsec vs am gear
    # Mazda RX4            4 21.0   6  160 110 3.90 2.620 16.46  0  1    4
    # Mazda RX4 Wag        4 21.0   6  160 110 3.90 2.875 17.02  0  1    4
    
    0 讨论(0)
  • 2020-12-22 23:54

    You can change the order of columns by adressing them in the new order by choosing them explicitly with data[,c(ORDER YOU WANT THEM TO BE IN)]

    If you just want the last column to be first use: data[,c(ncol(data),1:(ncol(data)-1))]

    > head(cars)
      speed dist
    1     4    2
    2     4   10
    3     7    4
    4     7   22
    5     8   16
    6     9   10
    
    > head(cars[,c(2,1)])
      dist speed
    1    2     4
    2   10     4
    3    4     7
    4   22     7
    5   16     8
    6   10     9
    
    0 讨论(0)
  • 2020-12-22 23:58

    I don't know if it's worth adding this as an answer or if a comment would be fine, but I wrote a function called moveme that lets you do what you want to do with the language you describe. You can find the function at this answer: https://stackoverflow.com/a/18540144/1270695

    It works on the names of your data.frame and produces a character vector that you can use to reorder your columns:

    mydf <- data.frame(matrix(1:12, ncol = 4))
    mydf
    moveme(names(mydf), "X4 first")
    # [1] "X4" "X1" "X2" "X3"
    moveme(names(mydf), "X4 first; X1 last")
    # [1] "X4" "X2" "X3" "X1"
    
    mydf[moveme(names(mydf), "X4 first")]
    #   X4 X1 X2 X3
    # 1 10  1  4  7
    # 2 11  2  5  8
    # 3 12  3  6  9
    

    If you're shuffling things around like this, I suggest converting your data.frame to a data.table and using setcolorder (with my moveme function, if you wish) to make the change by reference.


    In your question, you also mentioned "I just want to pick one column and move it to the start". If it's an arbitrary column, and not specifically the last one, you could also look at using setdiff.

    Imagine you're working with the "mtcars" dataset and want to move the "am" column to the start.

    x <- "am"
    mtcars[c(x, setdiff(names(mtcars), x))]
    
    0 讨论(0)
  • 2020-12-22 23:58

    If you want to move any named column to the first position, simply use:

    df[,c(which(colnames(df)=="desired_colname"),which(colnames(df)!="desired_colname"))]
    
    0 讨论(0)
  • 2020-12-23 00:00
    dataframe<-dataframe[,c(1000, 1:999)]
    

    this will move your last column i.e. 1000th column to the first column.

    0 讨论(0)
  • 2020-12-23 00:05

    Move any column from any position for the first position in your data

    n <- which(colnames(df)=="column_need_move")
    column_need_move <- df$column_need_to_move
    df <- cbind(column_need_move, df[,-n])
    
    0 讨论(0)
提交回复
热议问题