2013-03-29 123 views
2

假設我有一個數據集,看起來像以下,其中年上市向下行:創建透視表

id<-c(1,1,1,2,2,2,3,3,3) 
year<-c(1990, 1991, 1992, 1992, 1993, 1994, 1993, 1994, 1995) 
N<-c(7,8,9,7,1,2,5,4,3) 
dataset<-data.frame(cbind(id, year, N)) 

我想有輸出如下所示,與年柱標題:

id 1990 1991 1992 1993 1994 1995 
1 7  8  9  0  0  0 
2 0  0  7  1  2  0   
3 0  0  0  5  4  3 

我知道這是一個相當簡單的問題,但我一直在與XTABS瞎搞()和熔體()和CAST(),但我不能完全得到它的權利。

回答

2

另一種方式來做到這一點:使用tidyverse

> library(reshape2) 
> dcast(dataset, id ~ year, fill=0) 
# Using N as value column: use value.var to override. 
    id 1990 1991 1992 1993 1994 1995 
1 1 7 8 9 0 0 0 
2 2 0 0 7 1 2 0 
3 3 0 0 0 5 4 3 
+1

在reshape2(d/a)您可以提供投功能的'補= 0'參數來填充零。 –

+0

@DWin感謝您的指針,我編輯了我的答案;) –

+0

謝謝你兩個有用的答案。我選擇這個版本作爲首選答案,因爲它也適用於id是因素。 – Luke

2
> xtabs(N~id+year, data=dataset) 
    year 
id 1990 1991 1992 1993 1994 1995 
    1 7 8 9 0 0 0 
    2 0 0 7 1 2 0 
    3 0 0 0 5 4 3 

您的dataset使用reshape2術語處於「熔化」形式。在數據查詢界也稱爲「第一範式」。

0

這幾天更是風靡一時:

library(tidyr) 

dataset %>% 
    spread(year, N, fill = 0)