【发布时间】:2020-03-25 00:58:19
【问题描述】:
我知道有很多关于从长格式转换为宽格式的指南。例如,请参阅here。
但是,我相信我有一个独特的案例,或者至少是我无法在堆栈溢出中找到答案的案例,尽管我可能没有正确的语言来回答我的问题。我将描述我的数据问题。我有一个如下所示的数据框:
> my.df <- data.frame(ID=rep(c("A","B","C"), 3), TIME=rep(1:9, each=1), X=1:9, Y=10:18)
> my.df
ID TIME X Y
1 A 1 1 10
2 B 2 2 11
3 C 3 3 12
4 A 4 4 13
5 B 5 5 14
6 C 6 6 15
7 A 7 7 16
8 B 8 8 17
9 C 9 9 18
我想从长格式转换为宽格式,但重要的是我希望保留时间列中包含的唯一信息,并且不希望它分散到列名中。我想在 ID 重复的地方创建多个时间列,并在该列旁边存储相应的 X 和 Y 数据。
请参阅下面的所需输出:
> my.df <- data.frame(ID=c("A","B","C"), TIME_1=c(1,2,3),X_1 = c(1,2,3), Y_1= c(10,11,12),
+ TIME_2 = c(4,5,6),X_2 = c(4,5,6),Y_2 = c(13,14,15),
+ TIME_3 = c(7,8,9),X_3 = c(7,8,9),Y_3 = c(16,17,18))
> my.df
ID TIME_1 X_1 Y_1 TIME_2 X_2 Y_2 TIME_3 X_3 Y_3
1 A 1 1 10 4 4 13 7 7 16
2 B 2 2 11 5 5 14 8 8 17
3 C 3 3 12 6 6 15 9 9 18
这可能吗?
我的真实数据框要大得多,并且 TIME 列包含我无法放入列名的唯一日期,这就是为什么我想将该信息存储在新列中的原因。我知道我最多只有 4 个重复的 ID 值,所以我不担心创建过多的列。
【问题讨论】:
标签: r