2012-01-24 41 views
3

我期望獲取當前廣泛的數據並將其融合爲長格式。訣竅是我想創建一個序列指示器。在R中重新整形幷包含序列號

這裏是我的數據:

df.wide <- data.frame(id = 1:5, 
         code1 = sample(month.abb, 5), 
         code2 = sample(month.abb, 5)) 

我在尋找:

id rank value 
1 1 1  Dec 
2 1 2  Jan 
3 2 1  May 
4 2 2  Jun 
5 3 1  Aug 
6 3 2  Aug 
7 4 1  Sep 
8 4 2  Mar 
9 5 1  Dec 
10 5 2  Nov 

我懷疑,我可以用這樣的:

melt(df.wide, id=c("id")) 

和遍歷數據aftewards以清理結果,但我知道重塑是一個很好的包,並希望在重新發明之前提出要求。

回答

4

下面是使用reshape函數的一襯在base R(不要與reshape包混淆)

reshape(df.wide, varying = 2:3, timevar = 'rank', sep = "", direction = 'long') 
+1

這是很大的;正是我所期待的。謝謝。 – Btibert3

2

據我所知,你在軌道上。

df.melt <- melt(df.wide, idvar='id', variable_name='rank') 
df.melt$rank <- gsub('code', '', df.melt$rank) 

沒有必要重複說每一個。

您還可以使用:

levels(df.melt$rank) <- 1:2 

但是,請注意這兩個版本給字符而不是數字。如果您需要數字,請將gsub包裝在as.numeric()中。