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() 和 melt() 和 cast(),但我不能完全正确。

4

3 回答 3

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 术语,您处于“熔化”形式。在数据查询圈中也称为“第一范式”。

于 2013-03-29T21:25:45.487 回答
2

另一种方法:

> 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
于 2013-03-29T21:27:02.277 回答
0

这些天使用 tidyverse 更为流行:

library(tidyr)

dataset %>% 
  spread(year, N, fill = 0)
于 2017-10-01T20:26:29.690 回答