将列中的值转换为R中现有数据框中的行名称

DQd*_*dlM 96 r

我想将现有数据框的列中的值转换为行名称.是否可以在不导出数据帧然后通过row.names =调用重新导入数据帧的情况下执行此操作?

例如,我想转换:

 > samp 
     names Var.1 Var.2 Var.3
 1     A     1     5     0
 2     B     2     4     1
 3     C     3     3     2
 4     D     4     2     3
 5     E     5     1     4
Run Code Online (Sandbox Code Playgroud)

成:

> samp.with.rownames 
     Var.1 Var.2 Var.3
A     1     5     0
B     2     4     1
C     3     3     2
D     4     2     3
E     5     1     4
Run Code Online (Sandbox Code Playgroud)

谢谢

Dir*_*tel 122

这应该做:

samp2 <- samp[,-1]
rownames(samp2) <- samp[,1]
Run Code Online (Sandbox Code Playgroud)

简而言之,除了重新分配之外别无选择.

编辑:纠正自己,也可以到位:分配rowname属性,然后删除列:

R> df<-data.frame(a=letters[1:10], b=1:10, c=LETTERS[1:10])
R> rownames(df) <- df[,1]
R> df[,1] <- NULL
R> df
   b c
a  1 A
b  2 B
c  3 C
d  4 D
e  5 E
f  6 F
g  7 G
h  8 H
i  9 I
j 10 J
R> 
Run Code Online (Sandbox Code Playgroud)

  • > rownames(df)< - df [,1]`row.names < - .data.frame`(`*tmp*`,value = value)出错:无效'row.names'长度另外:警告信息:不推荐在tibble上设置行名. (4认同)
  • @user3673 一个可能的怀疑是您没有使用数据框。通过“class(df)”验证这一点。如果这给出了多个类,只需调用 `df&lt;- as.data.frame(df)` 即可解决它。 (4认同)

Joe*_*Joe 31

截至2016年,您也可以使用tidyverse.

library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")
Run Code Online (Sandbox Code Playgroud)

  • 更具体地说,它是`tibble::column_to_rownames` (2认同)

nig*_*nry 20

在一条线上

> samp.with.rownames <- data.frame(samp[,-1], row.names=samp[,1])
Run Code Online (Sandbox Code Playgroud)


str*_*agu 10

看起来单行更简单(目前使用 R 3.5.3):

# generate original data.frame
df <- data.frame(a = letters[1:10], b = 1:10, c = LETTERS[1:10])
# use first column for row names
df <- data.frame(df, row.names = 1)
Run Code Online (Sandbox Code Playgroud)

用于行名称的列会自动删除。

  • 整洁的!我直接使用 tidyverse 解决方案,没有检查 Base R 是否有处理该问题的便捷方法。我应该从基础开始。 (2认同)

vic*_*910 7

您可以通过2条简单的语句执行此操作:

row.names(samp) <- samp$names
samp[1] <- NULL
Run Code Online (Sandbox Code Playgroud)