我有一组二元数据.因此,对话中的每个人都可以在5分钟(300秒)内自由切换2个任务之间的次数,并记录每个人在任务之间切换的时间.
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
我希望通过为两个人创建一个共同的时间线来转换数据,更具体地说,有六十五秒的间隔(占用300秒),并且能够显示每个人每隔5秒钟做一次的任务.
这是结果应该如何的示例(在此示例中,它以10秒为间隔).
Time PartA 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 clarifi后继续编辑….
基本上我是:
>使用xts包创建2个时间序列
>每隔k秒对齐一次
>合并他们
>在每个NA之前用最近的非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