R中的数据转换 - 按ID分组变量

时间:2014-03-19 02:39:22

标签: r reshape

我确定这是一个简单的问题,但我不确定要搜索什么或如何解决它。

我的数据看起来像这样:

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是下一个等等。

1 个答案:

答案 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)是指与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的列...我会让您处理这些小细节。