Преобразование значений в столбце в имена строк в существующем фрейме данных в R

109

Я хотел бы преобразовать значения в столбце существующего фрейма данных в имена строк. Это возможно сделать без экспорта фрейма данных и его повторного импорта с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

в:

> 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

Спасибо

DQdlM
источник

Ответы:

135

Это должно делать:

samp2 <- samp[,-1]
rownames(samp2) <- samp[,1]

Короче говоря, альтернативы переназначению нет.

Изменить: исправляя себя, можно также сделать это на месте: назначить атрибуты 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> 
Дирк Эддельбюттель
источник
4
> rownames (df) <- df [, 1] Ошибка в row.names<-.data.frame( *tmp*, value = value): недопустимая длина 'row.names' Дополнительно: Предупреждающее сообщение: установка имен строк в тиббле устарела.
user3673
37

С 2016 года вы также можете использовать tidyverse.

library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")
Джо
источник
1
Более конкретно, этоtibble::column_to_rownames
Отт Toomet
1
Я получаю предупреждение «Установка имен строк на тиббле устарела»
Quantum7,
1
Визуализация tibble не показывает имена строк, однако, чтобы увидеть это, вам нужно передать его в as.data.frame ()samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
Маттео
22

в одну строку

> samp.with.rownames <- data.frame(samp[,-1], row.names=samp[,1])
Нигельгенри
источник
11

Вы можете выполнить это двумя простыми операторами:

row.names(samp) <- samp$names
samp[1] <- NULL
victor8910
источник
Работает в R 3.5.3
TheSciGuy 08
5

Похоже, однострочник стал еще проще (в настоящее время используется 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)

Столбец, используемый для имен строк, удаляется автоматически.

Страгу
источник