190

我有一个这样的数据框:

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)

有没有一条线可以做到这一点?

4

9 回答 9

189

或者您可以使用tibble'srownames_to_column与大卫的回答相同:

library(tibble)
df <- tibble::rownames_to_column(df, "VALUE")

注意:之前调用的函数add_rownames()已被弃用,正在被替换为tibble::rownames_to_column()

于 2015-04-08T10:04:41.193 回答
151

可以删除行名,也可以通过引用将它们转换为列(不使用重新分配内存->)使用包中的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”添加为行列。

于 2015-04-08T09:53:12.420 回答
99

单行选项是:

df$names <- rownames(df)
于 2016-03-18T12:21:36.360 回答
36

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

df <- data.frame(names = row.names(df), df)
于 2017-03-30T17:55:32.297 回答
21

根据上述建议将我的评论移至答案:

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

d <- cbind(rownames(d), data.frame(d, row.names=NULL))
于 2019-03-27T13:43:58.547 回答
8

dplyr::as_tibble(df, rownames = "your_row_name")会给你更简单的结果。

于 2019-06-01T15:37:33.870 回答
3

或者通过使用DBIssqlRownamesToColumn

library(DBI)
sqlRownamesToColumn(df)
于 2019-11-22T22:53:03.617 回答
0
df = data.frame(columnNameILike = row.names(df), df)
于 2021-03-12T20:09:49.210 回答
0

将数据行名更改为真实列

data <- data %>%
  rownames_to_column(var="the name you want")
于 2022-01-23T19:38:42.743 回答