我想将现有数据框的列中的值转换为行名称.是否可以在不导出数据帧然后通过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)
Joe*_*Joe 31
截至2016年,您也可以使用tidyverse
.
library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")
Run Code Online (Sandbox Code Playgroud)
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)
用于行名称的列会自动删除。
您可以通过2条简单的语句执行此操作:
row.names(samp) <- samp$names
samp[1] <- NULL
Run Code Online (Sandbox Code Playgroud)