reshape2
パッケージを使用してdcast
ingしているデータフレームがあり、最初の列を削除して、代わりにそれをデータフレームの行名にしたいと考えています。
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
これでいいの?
iris %>% `rownames<-`(seq_len(nrow(iris)))
tibble
の新しいバージョンでは、よりエレガントなソリューションが存在します:
df <- df %>% pivot(.) %>% tibble::column_to_rownames('ID_full')
重要なのは、行名に変わる列が変数として渡される場合にも機能します。これは、関数の内部で非常に便利です。
magrittr
エイリアスset_rownames
を使用できます。
df %>% set_rownames(.$ID_full)