将行名称转换为第一列

时间:2015-04-08 09:45:48

标签: r dataframe col rowname

我有一个这样的数据框:

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" 

我想将行名称转换为第一列。目前我使用类似的东西将行名称作为第一列:

  d <- df
  names <- rownames(d)
  rownames(d) <- NULL
  data <- cbind(names,d)

是否有一行可以做到这一点?

8 个答案:

答案 0 :(得分:89)

或者您可以使用dplyr的{​​{1}}与David的答案完全相同:

add_rownames

更新(2016年中):

library(dplyr) df <- add_rownames(df, "VALUE") 已被弃用,正在被add_rownames()取代(相同的功能,但Hadl​​ey稍稍重构了tibble::rownames_to_column()

答案 1 :(得分:86)

您可以两者删除行名称,并使用->将其转换为引用列(不使用setDT重新分配内存)来自keep.rownames = TRUE

data.table参数
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

如@snoram所述,您可以为新列提供您想要的任何名称,例如: setDT(df, keep.rownames = "newname")会将“newname”添加为rows列。

答案 2 :(得分:59)

一行选项是:

df$names <- rownames(df)

答案 3 :(得分:19)

或者,您可以创建新的数据框(或覆盖当前的数据框,如下例所示),这样您就不需要使用任何外部包。但是,对于庞大的数据帧,这种方式可能效率不高。

df <- data.frame(names = row.names(df), df)

答案 4 :(得分:3)

根据以上建议将我的评论移至答案中

您不需要额外的包裹,这是一个单行纸:

d <- cbind(rownames(d), data.frame(d, row.names=NULL))

答案 5 :(得分:1)

或使用DBI s sqlRownamesToColumn

library(DBI) sqlRownamesToColumn(df)

答案 6 :(得分:0)

as_data_frame(df, rownames = "your_row_name")将为您提供更简单的结果。

答案 7 :(得分:0)

df = data.frame(columnNameILike = row.names(df), df)