R 将行名称转换为第一列

R 将行名称转换为第一列,r,dataframe,col,rowname,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

我有这样一个数据框:

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)
d您可以使用
data.table
包中的
setDT
及其
keep.rownames=TRUE
参数删除行名并通过引用将其转换为列(无需使用
->
重新分配内存)

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”作为行列。

或者您可以使用
dplyr
添加rownames
,其作用与David的答案相同:

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

df单线选项是:

df$names <- rownames(df)

df$names或者,您可以创建一个新的数据帧(或覆盖当前数据帧,如下例),这样您就不需要使用任何外部包。然而,这种方法对于庞大的数据帧可能并不有效

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

df根据上述建议将我的评论移动到答案中:


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

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

d
dplyr::as_data_frame(df,rownames=“your_row_name”)
将为您提供更简单的结果。

或者使用
DBI
s
sqlRownamesToColumn

library(DBI)
sqlRownamesToColumn(df)

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

可能的重复您不需要额外的包,这里有一行:
d@ssp3nc3r的注释应该是一个可接受的答案不完全相同,因为它不是通过引用来实现的:)更新:dplyr更新需要使用tibble::rownames\u to\u column()由于dplyr::rownames已被弃用。如果你想留在TidyVerse中,这是一个很好的选择。我希望你知道这样一个事实:它在最后添加了
rownames
,而不是作为第一列。在删除索引后,使用
rownames(df)使用
colnames(df)[1]@swetab哦,不。
setnames(df,1,“newname”)
数据.table
的方式。@DavidArenburg嗯,(至少)现在您可以在相同的调用
setDT(df,keep.rownames=“newname”)[
@DavidArenburg中找到
as.data.table()
:如果为TRUE,则将输入对象的名称添加为一个单独的列“rn”。keep.rownames=“id”将列命名为“id”instead@snoram很好的发现,为了使文档保持一致,我会做一个PR。或者:
df@HectorHaffenden为海报编辑了这个,因为这实际上是一个很好的建议。“
as\u data\u frame()
在tibble 2.0.0中被弃用。请改用
as\u tibble()
。”否则这就是我的最爱。