将行名转换为第一列

我有这样的数据框:

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) 

是否有一条线来做到这一点?

可以通过引用 (不使用->来重新分配内存),也可以使用setDT及其data.table包中的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 

或者你可以使用dplyradd_rownames ,它和David的答案一样:

 library(dplyr) df <- add_rownames(df, "VALUE") 

更新(2016年中):

add_rownames()已被弃用,正在被replace为tibble::rownames_to_column() (相同的function,但哈德利重构dplyr了一下)。

一行选项是:

 df$names <- rownames(df) 

或者,您可以创build一个新的数据框(或覆盖当前的数据框,如下例所示),因此不需要使用任何外部程序包。 然而,这种方式可能不是有效的巨大的dataframe。

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