1
假設我有rownames這種凌亂的數據幀重塑dataframes
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
以完成不同的操作,以便在一行中實現此結果?
我會避免使用'cbind()返回'這樣的 - 這是一個有點陷阱的,因爲你永遠不知道什麼'cbind()返回'會返回(矩陣或數據框?)。我會使用'data.frame()'來代替。 – hadley 2014-11-05 19:42:12
@hadley,不知道我理解你的評論。 'gather'和'stack'都會返回'data.frame's,這意味着我們知道'cbind'會返回什麼。或者有''gather'不會返回我沒有想到的'data.frame'的機會。 – A5C1D2H2I1M1N2O1R2T1 2014-11-06 01:43:35
我的意思是一般使用'cbind()'是有風險的,因爲它定義的語義很差(以同樣的方式避免使用'sapply()') – hadley 2014-11-06 19:15:14