0 votes
1 view
in R Programming by (5.3k points)

I have a data frame like this:

df

              VALUE              ABS_CALL DETECTION P-VALUE    

    1007_s_at "957.729231881542" "P"      "0.00486279317241156"

    1053_at   "320.632701283368" "P"      "0.0313356324173416" 

    117_at    "429.842323161046" "P"      "0.0170004527476119" 

    121_at    "2395.7364289242"  "P"      "0.0114473584876183" 

    1255_g_at "116.493632746934" "A"      "0.39799368200131"   

    1294_at   "739.927122116896" "A"      "0.0668649772942343" 

I want to convert the row names into the first column. Currently, I use something like this to make row names as the first column:

  d <- df

  names <- rownames(d)

  rownames(d) <- NULL

  data <- cbind(names,d)

Is there a single line to do this?

1 Answer

0 votes
by (25.3k points)

You can use the setDF function from the data.table package that is a helper function to convert a data.table or list of equal length to data.frame by reference.

 

Usage:

setDF(x, rownames=NULL)

Arguments

x

A data.table, data.frame or list of equal length.

 

rownames

A character vector to assign as the row names of x.

 

In your case:

df <- data.frame(VALUE = c("1007_s_at","1053_at","117_at","121_at","1255_g_at","1294_at"),

                 ABS_CALL= c(957.7292,320.6327,429.8423,2395.7364,116.4936,739.9271),

                 DETECTION = c("P","P","P","P","A","A"),

                 P.VALUE = c(0.004862793,0.031335632,0.017000453,0.011447358,0.397993682,0.066864977))

 

df

df

      VALUE  ABS_CALL DETECTION     P.VALUE

1 1007_s_at  957.7292         P 0.004862793

2   1053_at  320.6327         P 0.031335632

3    117_at  429.8423         P 0.017000453

4    121_at 2395.7364         P 0.011447358

5 1255_g_at  116.4936         A 0.397993682

6   1294_at  739.9271         A 0.066864977

Using setDT function:

library(data.table)

setDT(df, keep.rownames = TRUE)[]

 

   rn     VALUE  ABS_CALL DETECTION     P.VALUE

1:  1 1007_s_at  957.7292         P 0.004862793

2:  2   1053_at  320.6327         P 0.031335632

3:  3    117_at  429.8423         P 0.017000453

4:  4    121_at 2395.7364         P 0.011447358

5:  5 1255_g_at  116.4936         A 0.397993682

6:  6   1294_at  739.9271         A 0.066864977

You can also use the rownames_to_column() as follows:

df <- tibble::rownames_to_column(df, "S.NO")

df

  S.NO     VALUE  ABS_CALL DETECTION     P.VALUE

1    1 1007_s_at  957.7292         P 0.004862793

2    2   1053_at  320.6327         P 0.031335632

3    3    117_at  429.8423         P 0.017000453

4    4    121_at 2395.7364         P 0.011447358

5    5 1255_g_at  116.4936         A 0.397993682

6    6   1294_at  739.9271         A 0.066864977

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...