假设我有一个类似于以下内容的数据集,其中的年份列在下面的行中:
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(),但我无法正确解决问题。
答案 0 :(得分: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
已经融入了#34;使用reshape2术语表单。在数据查询圈中也称为&#34;第一范式&#34;。
答案 1 :(得分: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
答案 2 :(得分:0)
这些天使用tidyverse更是风靡一时:
library(tidyr)
dataset %>%
spread(year, N, fill = 0)