2014-03-19 37 views
0

我确定这是一个简单的问题,但我不确定要搜索什么或如何解决它。R中的数据转换 - 按ID分组变量

我的数据看起来是这样的:

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. 

哪里时间1是第一次约会,用户将出现在数据,时间2是下等

+0

你想查找有关变量的统计信息,或者只是重新设计一个变量的数据(这就是你的例子所做的)? – rawr

+0

@rawr - 我编辑澄清。希望有帮助。我想查找统计数据,但我想先重塑。 – Jeremy

+0

@Jealie - 类似的东西,但数据全部按ID分组,而不是一次只显示一个ID。 – Jeremy

回答

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)是指对应的式柱号码到DateUserIDVar2

最后,以获得所需的输出,你可以简单地移动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的列......我会让您处理这些小细节。

+0

唯一的问题是,看起来它会将日期变量组成变量2,对吗? 我的目标是让列1成为用户ID X的第一个Var2,而不管日期是什么。例如,如果UserID 1的最早记录是2013-03,而UserID 2的最早记录是2013-04,则这两个值仍会显示在T1列中。 – Jeremy

+0

我已编辑答案以考虑到这一点。你在找什么? – Jealie