如何设置通过管道 %>% 运算符传递的数据框的行名称?
How to set the row names of a data frame passed on with the pipe %>% operator?
我有一个数据框,我正在使用 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
函数 dcast table:
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')
重要的是,当要转换为行名的列作为变量传递时,它也有效,即 super-convenient,在函数内部!
您可以使用 magrittr
别名 set_rownames
:
df %>% set_rownames(.$ID_full)
我有一个数据框,我正在使用 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
函数 dcast table:
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')
重要的是,当要转换为行名的列作为变量传递时,它也有效,即 super-convenient,在函数内部!
您可以使用 magrittr
别名 set_rownames
:
df %>% set_rownames(.$ID_full)