gpt4 book ai didi

当主题之间的 "time"值不同时,在 R 中 reshape

转载 作者:行者123 更新时间:2023-12-04 22:48:39 25 4
gpt4 key购买 nike

我已经浏览了包括 StackOverflow 在内的整个网络,并在问这个问题之前测试了各种东西,但如果我错过了一个很好的答案,请原谅我。

我看到了很多关于 reshape 功能的帮助(还有包,但我不能做我需要的)。我有一个因主题而异的“时间”变量,例如,它不是 time1、time2、time3。我想制作一个广泛的数据集,按主题 ID 将每个唯一的时间值视为“time1”、“time2”、“time3”,但我需要保存日期。为了具体说明,这里有一些示例数据:

Id<-c(1, 1,1, 2,2,2, 3)
date<-c("Jan10", "Jun11", "Dec11", "Feb10", "May10", "Dec10", "Jan11")
Score<-c(52, 43, 67, 56, 33, 21, 20)
format2<-data.frame(Id, date, Score)
format2

Id date Score
1 1 Jan10 52
2 1 Jun11 43
3 1 Dec11 67
4 2 Feb10 56
5 2 May10 33
6 2 Dec10 21
7 3 Jan11 20

我希望它看起来像这样:
  Id  date1 Score1 date2 Score2 date3 Score3
1 Jan10 52 Jun11 43 Dec11 67
2 Feb10 56 Dec10 21 May10 33
3 Jan11 20 NA NA NA NA

感谢您的帮助,如果我错过了一个明显的答案,我深表歉意。

最佳答案

您需要生成一个 time变量,可以使用 ave() 快速完成:

format2$time <- ave(format2$Id, format2$Id, FUN=seq_along)
reshape(format2, direction = "wide", idvar="Id", timevar="time")
# Id date.1 Score.1 date.2 Score.2 date.3 Score.3
# 1 1 Jan10 52 Jun11 43 Dec11 67
# 4 2 Feb10 56 May10 33 Dec10 21
# 7 3 Jan11 20 <NA> NA <NA> NA

有些人更喜欢 reshape2包因为它的语法,但即使在那里,你也需要有一个 time在你可以做任何有趣的事情之前,变量。

从上面继续(创建时间变量的地方):
library(reshape2)
format2m <- melt(format2, id.vars=c("Id", "time"))
dcast(format2m, Id ~ variable + time)
# Id date_1 date_2 date_3 Score_1 Score_2 Score_3
# 1 1 Jan10 Jun11 Dec11 52 43 67
# 2 2 Feb10 May10 Dec10 56 33 21
# 3 3 Jan11 <NA> <NA> 20 <NA> <NA>

关于当主题之间的 "time"值不同时,在 R 中 reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com