Как установить имена строк фрейма данных, передаваемого с оператором pipe %>%?

У меня есть фрейм данных, который я dcastиспользуя reshape2 пакет, и я хотел бы удалить первый столбец и вместо него стать именами строк фрейма данных.

Исходный кадр данных, перед dcast:

> corner(df)

ID_full      gene cpm
1  S36-A1   DDX11L1   0
2  S36-A1    WASH7P   0
3  S36-A1 MIR1302-2   0
4  S36-A1   FAM138A   0
5  S36-A1     OR4F5   0

pivot функция для показа таблицы:

 library(reshape2)

 pivot <- function(x){
             castTable <- x %>% dcast(ID_full ~ gene, value.var="cpm")
             }

После dcastзавернутый в мой pivot функция:

> corner(df)

ID_full 1060P11.3 A1BG A1BG-AS1 A1CF
1  S36-A1         0    0        0    0
2 S36-A10         0    0        0    0
3 S36-A11         0    0        0    0
4 S36-A12         0    0        0    0
5  S36-A2         0    0        0    0

Я бы хотел, чтобы ID_full стал именами строк и прекратил существовать в виде столбца, переданного после dcasting, Я могу сделать это в несколько строк, каждый раз заменяя фрейм данных, но я бы хотел сделать все это, используя %>% оператор.

Лучшая попытка, которую я могу придумать, будет включать что-то вроде этого, но, очевидно, это не сработает:

library(dplyr)

df <- df %>% pivot(.) %>% with(., row.names=df[,1])

Буду признателен за любые предложения... эта неприятность сводит меня с ума!

ОБНОВИТЬ:

Спасибо за ваши ответы:

Это выражение работает хорошо:

df <- df %>% pivot(.) %>% `rownames<-`(.[,1]) %>% select(-ID_full)

> corner(df)

        1060P11.3 A1BG A1BG-AS1 A1CF        A2M
S36-A1          0    0        0    0    0.00000
S36-A10         0    0        0    0    0.00000
S36-A11         0    0        0    0    0.00000
S36-A12         0    0        0    0    1.62189
S36-A2          0    0        0    0 1170.95000

4 ответа

Решение

Это будет делать?

iris %>% `rownames<-`(seq_len(nrow(iris)))

С более поздней версией tidyverseсуществует более элегантное решение:

df <- df %>% pivot(.) %>% column_to_rownames('ID_full')

Важно то, что он работает также, когда столбец для обращения к имени строки передается как переменная, что очень удобно, когда внутри функции!

Вы можете использовать magrittr псевдоним set_rownames:

df %>% set_rownames(.$ID_full)
      df <- data.frame(x=1:2,y=3:4,k=c('a','b')) 
df %>% data.frame(row.names = 'k') # remove column k
df %>% data.frame(row.names = 3) # remove column k
df %>% data.frame(row.names = .$k) # keep column k
df %>% data.frame(row.names = .[[3]]) # keep column k
df %>% data.frame(row.names = c('A','B')) # use any other vector as rowname
Другие вопросы по тегам