gpt4 book ai didi

r - R中的时间序列-对齐具有不同时间戳的数据

转载 作者:行者123 更新时间:2023-12-01 03:51:29 24 4
gpt4 key购买 nike

我有一组二元数据。因此,二人组中的每个人都可以在 5 分钟(300 秒)内随意在 2 个任务之间切换任意次数,我记录了每个人在任务之间切换的时间。

参与者 A 参与者 B
时间任务 时间任务
0 1 0 0
21.43 0 23.08 1
42.86 1 46.16 0
64.29 0 69.24 1
85.72 1 92.32 0
107.15 0 115.4 1
128.58 1 138.48 0
150.01 0 161.56 1
171.44 1 184.64 0
192.87 0 207.72 1
214.3 1 230.8 1
235.73 0 253.88 0
257.16 1 276.96 0
278.59 0

我希望通过为两个人创建一个共同的时间线来转换数据,更具体地说,有 60 个 5 秒的时间间隔(共 300 秒),并且能够显示每个人在每 5 秒的时间间隔内在做什么任务。

这是结果应该是什么样子的一个例子(在这个例子中,它以 10 秒为间隔)。

时间部分 A PptB
0 1 0
10 1 0
20 1 0
30 0 1
40 0 1
50 1 0
60 1 0
70 0 1
80 0 1
90 1 1
100 1 0
110 0 0
120 0 1
130 1 1
140 1 0
150 1 0
160 0 0
170 0 1
180 1 1
190 1 0
200 0 0
210 0 1
220 1 1
230 1 1
240 0 1
250 0 1
260 1 0
270 1 0
280 0 0
290 0 0

我怎样才能做到这一点?

最佳答案

例如你可以这样做:

## read the data as it is shown in the question
dat <- read.table(text='Participant A Participant B
Time Task Time Task
0 1 0 0
21.43 0 23.08 1
42.86 1 46.16 0
64.29 0 69.24 1
85.72 1 92.32 0
107.15 0 115.4 1
128.58 1 138.48 0
150.01 0 161.56 1
171.44 1 184.64 0
192.87 0 207.72 1
214.3 1 230.8 1
235.73 0 253.88 0
257.16 1 276.96 0
278.59 0',header=TRUE,skip=1,fill=TRUE)
## create data for each participant
partA = data.frame(dat[,1:2],part='A')
partB = setNames(data.frame(dat[,3:4],part='B'),names(partA))
## merge the 2 frames and order vs Time
dat.all = rbind.data.frame(partA,partB)
dat.all = dat.all[complete.cases(dat.all),]
dat.all = dat.all[order(dat.all$Time),]

您可以检查结果:
head(dat.all)
Time Task part
1 0.00 1 A
15 0.00 0 B
2 21.43 0 A
16 23.08 1 B
3 42.86 1 A
17 46.16 0 B

在 OP 澄清后继续编辑....

基本上我是:
  • 使用 xts 创建 2 个时间序列包裹
  • 每 k 秒对齐一次
  • 合并它们
  • 用它之前的最新非 NA 替换每个 NA。

  • 希望很清楚,解决方案有点长,因为使用不会以方便的形式提供数据。
    library(reshape2)
    dat.all <-
    dcast(Time~part,data=dat.all,value.var="Task",fill=0)
    library(xts)
    k <- 10

    origin <- Sys.time()
    dat_xts <-
    xts(dat.all[,c('A','B')], origin+dat.all$Time)
    dat_target= xts( seq(0,300,k),index(dat_xts)[1]+ seq(0,300,k))

    dat_xts = align.time(dat_xts,n=k)
    dat_target = align.time(dat_target,n=k)

    head(na.locf(merge(dat_xts,dat_target)))
    # A B dat_target
    # 2014-03-08 13:48:40 1 0 0
    # 2014-03-08 13:48:50 1 0 10
    # 2014-03-08 13:49:00 0 0 20
    # 2014-03-08 13:49:00 0 1 20
    # 2014-03-08 13:49:10 0 1 30
    # 2014-03-08 13:49:20 1 0 40

    关于r - R中的时间序列-对齐具有不同时间戳的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268102/

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