web-dev-qa-db-ja.com

パイプ%>%演算子で渡されるデータフレームの行名を設定する方法は?

reshape2パッケージを使用してdcastingしているデータフレームがあり、最初の列を削除して、代わりにそれをデータフレームの行名にしたいと考えています。

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
17
gaelgarcia

これでいいの?

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

tibbleの新しいバージョンでは、よりエレガントなソリューションが存在します:

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

重要なのは、行名に変わる列が変数として渡される場合にも機能します。これは、関数の内部で非常に便利です。

16
JelenaČuklina

magrittrエイリアスset_rownamesを使用できます。

df %>% set_rownames(.$ID_full)
8
Henrik