Перетворіть значення в стовпці в назви рядків у існуючому кадрі даних в R


108

Я хотів би перетворити значення у стовпці існуючого кадру даних у назви рядків. Чи можливо це зробити, не експортуючи кадр даних, а потім повторно імпортувати його за допомогою 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

Дякую

Відповіді:


135

Це слід зробити:

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

Отже, коротко кажучи, немає альтернативи перепризначенню.

Редагувати: виправляючи себе, можна також зробити це на місці: призначити атрибути назви рядків, а потім видалити стовпець:

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
> назви рядків (df) <- df [, 1] Помилка в row.names<-.data.frame( *tmp*, значення = значення): недійсна довжина 'row.names' Додатково: Попереджувальне повідомлення: Налаштування рядків на тиблиці застаріле.
user3673

36

З 2016 року ви також можете використовувати tidyverse.

library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")

1
Більш конкретно, цеtibble::column_to_rownames
Отт Тоомет

1
Я отримую попередження "Настроювання імен рядків на таблицю застаріло"
Quantum7

1
Тимчасова візуалізація не показує назви рядків, однак для їх перегляду вам потрібно передати його на as.data.frame ()samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
Маттео


11

Ви можете виконати це у двох простих операторах:

row.names(samp) <- samp$names
samp[1] <- NULL

Працює в R 3.5.3
TheSciGuy

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)

Стовпець, що використовується для назв рядків, видаляється автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.