我确定这是一个简单的问题,但我不确定要搜索什么或如何解决它。
我的数据看起来像这样:
Date UserID Var1 Var2
2013-01 1 2 3
2013-02 1 2 1
etc.
每个用户记录的日期不同。
我想找一个关于其中一个变量的统计数据(让我们说Var2),为了做到这一点,我想重塑数据,以便输出如下:
ID Time1 Time2 Time3 ...
1 3 1 NA
etc.
其中Time1是用户在数据中出现的第一个日期,Time2是下一个等等。
答案 0 :(得分:1)
(编辑以处理相对比例日期的重新对齐)
如何使用reshape
?
这是输入数据:
> zz <- "Date UserID Var1 Var2
+ 2013-01 1 2 3
+ 2013-02 1 2 1
+ 2013-02 2 2 1"
> Data <- read.table(text=zz, header = TRUE)
这是重塑:
Data2 = reshape(Data[c(1,2,4)],direction='wide',timevar='Date',idvar='UserID')
导致:
> Data2
UserID Var2.2013-01 Var2.2013-02
1 1 3 1
3 2 NA 1
(请注意,c(1,2,4)
是指与Date
,UserID
和Var2
最后,要获得所需的输出,您只需将NA
移动到每行的末尾即可:
t(sapply(1:nrow(Data2), function(x) c(Data2[x,!is.na(Data2[x,])],rep(NA,sum(is.na(Data2[x,]))))))
导致:
UserID Var2.2013-01 Var2.2013-02
[1,] 1 3 1
[2,] 2 1 NA
请注意,此处的列名称不再是当前的。此外,您可能在矩阵右侧只有包含NA的列...我会让您处理这些小细节。