R中的数据转换-按ID分组变量
我相信这是一个简单的问题,但我不确定该搜索什么或如何解决它 我的数据如下所示:R中的数据转换-按ID分组变量,r,reshape,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
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是下一个日期,等等。(编辑以处理相对比例上的日期重新对齐
如何使用重塑
这是为了输入数据:
> 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
UserID Var2.2013-01 Var2.2013-02
1 1 3 1
3 2 NA 1
UserID Var2.2013-01 Var2.2013-02
[1,] 1 3 1
[2,] 2 1 NA
(请注意,c(1,2,4)
指与日期
、用户ID
和变量2
相对应的列号)
最后,要获得所需的输出,只需将NA
移动到每行的末尾:
t(sapply(1:nrow(Data2), function(x) c(Data2[x,!is.na(Data2[x,])],rep(NA,sum(is.na(Data2[x,]))))))
导致:
> Data2
UserID Var2.2013-01 Var2.2013-02
1 1 3 1
3 2 NA 1
UserID Var2.2013-01 Var2.2013-02
[1,] 1 3 1
[2,] 2 1 NA
请注意,此处的列名不再是最新的。此外,在矩阵的右侧可能有只包含NA的列。。。我将让您处理这些小细节。您想查找有关变量的统计信息,或者只是重新调整其中一个变量的数据(您的示例就是这样做的)?@rawr-I编辑以澄清。希望这能有所帮助。我想查找统计数据,但我想先进行重塑。@Jealie-类似于此,但数据都是按ID分组的,而不是一次只显示一个ID。您应该查看
restrape2
库。melt()
函数非常擅长做这类事情。你只需要知道你想要识别哪些变量,哪些是度量变量。唯一的问题是它看起来会按照日期变量对变量2进行分组,对吗?我的目标是让第1列成为useridx的第一个Var2,而不管日期是什么。例如,如果UserID 1的最早记录是在2013-03年,UserID 2的最早记录是在2013-04年,那么这些值仍然会显示在T1列中。我编辑了答案以考虑这一点。这就是你要找的吗?