将行名称转换为第一列
Convert row names into first column
我有一个这样的数据框:
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
如@snoram 所述,您可以为新列指定任意名称,例如setDT(df, keep.rownames = "newname")
会将 "newname" 添加为行列。
或者您可以使用 tibble
的 rownames_to_column
,它的作用与 David 的回答相同:
library(tibble)
df <- tibble::rownames_to_column(df, "VALUE")
注意:早期称为 add_rownames()
的函数已被弃用并被 tibble::rownames_to_column()
取代
一行选项是:
df$names <- rownames(df)
或者,您可以创建一个新的数据框(或覆盖当前的数据框,如下例所示),这样您就不需要使用任何外部包。然而,这种方式对于巨大的数据帧可能效率不高。
df <- data.frame(names = row.names(df), df)
根据以上建议将我的评论移到答案中:
您不需要额外的包裹,这里有一条线:
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
dplyr::as_tibble(df, rownames = "your_row_name")
会给你更简单的结果。
或使用 DBI
s sqlRownamesToColumn
library(DBI)
sqlRownamesToColumn(df)
df = data.frame(columnNameILike = row.names(df), df)
将数据行名更改为实际列
data <- data %>%
rownames_to_column(var="the name you want")
我有一个这样的数据框:
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
如@snoram 所述,您可以为新列指定任意名称,例如setDT(df, keep.rownames = "newname")
会将 "newname" 添加为行列。
或者您可以使用 tibble
的 rownames_to_column
,它的作用与 David 的回答相同:
library(tibble)
df <- tibble::rownames_to_column(df, "VALUE")
注意:早期称为 add_rownames()
的函数已被弃用并被 tibble::rownames_to_column()
一行选项是:
df$names <- rownames(df)
或者,您可以创建一个新的数据框(或覆盖当前的数据框,如下例所示),这样您就不需要使用任何外部包。然而,这种方式对于巨大的数据帧可能效率不高。
df <- data.frame(names = row.names(df), df)
根据以上建议将我的评论移到答案中:
您不需要额外的包裹,这里有一条线:
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
dplyr::as_tibble(df, rownames = "your_row_name")
会给你更简单的结果。
或使用 DBI
s sqlRownamesToColumn
library(DBI)
sqlRownamesToColumn(df)
df = data.frame(columnNameILike = row.names(df), df)
将数据行名更改为实际列
data <- data %>%
rownames_to_column(var="the name you want")