gae*_*cia 15 r dataframe dplyr magrittr
我有一个数据框,我正在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
Run Code Online (Sandbox Code Playgroud)
pivot dcast表的功能:
library(reshape2)
pivot <- function(x){
castTable <- x %>% dcast(ID_full ~ gene, value.var="cpm")
}
Run Code Online (Sandbox Code Playgroud)
之后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
Run Code Online (Sandbox Code Playgroud)
我希望ID_full成为rownames,并停止作为一个列存在,用管道输送dcasting.我可以在几行中执行此操作,每次都替换数据帧,但我想使用%>%运算符完成所有操作.
我能想到的最好的尝试会涉及到这样的事情,但显然它不起作用:
library(dplyr)
df <- df %>% pivot(.) %>% with(., row.names=df[,1])
Run Code Online (Sandbox Code Playgroud)
我很感激任何建议......这种滋扰让我发疯!
更新:
谢谢你的回答:
这个表达式很好用:
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
Run Code Online (Sandbox Code Playgroud)
bap*_*ste 21
这会吗?
iris %>% `rownames<-`(seq_len(nrow(iris)))
Run Code Online (Sandbox Code Playgroud)
Jel*_*ina 16
在更高版本中tidyverse,存在一个更优雅的解决方案:
df <- df %>% pivot(.) %>% column_to_rownames('ID_full')
Run Code Online (Sandbox Code Playgroud)
重要的是,当转到rowname的列作为变量传递时,它也可以工作,这在函数内部是非常方便的!
You can use the magrittr alias set_rownames:
df %>% set_rownames(.$ID_full)
Run Code Online (Sandbox Code Playgroud)