假设我有这个带有行名的凌乱数据框
df<-data.frame(A=rnorm(2),B=rnorm(2),C=rnorm(2))
rownames(df)<-c('male','female')
> df
A B C
male 0.10138957 1.036535 2.0708251
female 0.08524181 -1.140275 -0.3800585
我想把它整理成整齐的形式,使列A
、、B
和C
折叠成一列,并且还有一列用于Gender
. 它可能看起来像这样
> desired_df
where value Gender
1 A 0.10138957 male
2 A 0.08524181 female
3 B 1.03653464 male
4 B -1.14027549 female
5 C 2.07082513 male
6 C -0.38005851 female
这是使用tidyr
.
desired_df<-gather(df,where,value)
desired_df['Gender']<-rep(c('male','female'),nrow(df)/2)
但是我不得不以一种相当不雅的方式将行名转换为一列。我的问题是 - 有哪些附加功能tidyr
或reshape
会对此有所帮助?或者我gather
是否可以通过不同的方式来实现这一结果?