如何使用管道符号%>%传递数据框并设置行名?

31

我有一个数据框,正在使用reshape2包中的dcast函数进行操作,并且我想要删除第一列并将其作为数据帧的行名。

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")
             }

在我的pivot函数中调用dcast之后:

> 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

1
dput() > 控制台输出。 corner() 是从哪里来的? ?rename; ?rownames. - hrbrmstr
6
这个函数的作用是将数据框(tibble)中的某一列转化为行名。 - Axeman
4个回答

33

使用更新版本的 tibble,存在一种更加优雅的解决方案:

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

重要的是,当将要转换为行名称的列作为变量传递时,它也可以在函数内部使用,这非常方便!


33

这个可以吗?

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

21
你可以使用 magrittr 别名 set_rownames
df %>% set_rownames(.$ID_full)

0
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接