在 R 中对时间序列数据中的分类变量进行上采样

问题描述 投票:0回答:1

如果这是多余的,我深表歉意,但我已尝试寻找解决方案,但没有找到任何似乎是我的问题的答案。所以,我有一堆变量的时间序列数据。一些变量(连续)在 1000hz 下记录,其他变量(分类)在 500hz 下记录。我想在 R 中对齐它们,使分类变量与连续变量具有相同的行数。换句话说,我想合并两个数据框并自动填充分类变量的空白,以便我的数据如下所示:

t_肌电图 CF_01 CF_02
0 -0.01796875 0.01234375
0.001 0.001875 0.05125
0.002 0.00828125 -0.04140625
0.003 -0.0125 -0.005625
0.004 -0.00765625 0.00078125
0.005 -0.01 0.02234375
0.006 0.01515625 -0.01296875
0.007 -0.01375 -0.070625
0.008 0.0096875 0.1534375
0.009 -0.05203125 0.02984375
0.01 0.1234375 0.00765625
0.011 -0.0596875 0.005625
0.012 -0.09296875 -0.001875
0.013 -0.0834375 -0.1128125
0.014 -0.009375 0.0090625
0.015 -0.00609375 0.02
0.016 0.00890625 0.0209375
0.017 0.02671875 0.00375
0.018 -0.001875 -0.0003125
0.019 -0.00171875 0.00171875

还有这个:

t_运动学 跨步停止
0 摇摆 A
0.002 摇摆 A
0.004 摇摆 A
0.006 摇摆 A
0.008 摇摆 A
0.01 摇摆 A
0.012 摇摆 A
0.014 立场 A
0.016 立场 A
0.018 立场 A

最终看起来像这样:

t_肌电图 CF_01 CF_02 t_运动学 跨步停止
0 -0.01796875 0.01234375 0 摇摆 A
0.001 0.001875 0.05125 0.001 摇摆 A
0.002 0.00828125 -0.04140625 0.002 摇摆 A
0.003 -0.0125 -0.005625 0.003 摇摆 A
0.004 -0.00765625 0.00078125 0.004 摇摆 A
0.005 -0.01 0.02234375 0.005 摇摆 A
0.006 0.01515625 -0.01296875 0.006 摇摆 A
0.007 -0.01375 -0.070625 0.007 摇摆 A
0.008 0.0096875 0.1534375 0.008 摇摆 A
0.009 -0.05203125 0.02984375 0.009 摇摆 A
0.01 0.1234375 0.00765625 0.01 摇摆 A
0.011 -0.0596875 0.005625 0.011 摇摆 A
0.012 -0.09296875 -0.001875 0.012 摇摆 A
0.013 -0.0834375 -0.1128125 0.013 摇摆 A
0.014 -0.009375 0.0090625 0.014 立场 A
0.015 -0.00609375 0.02 0.015 立场 A
0.016 0.00890625 0.0209375 0.016 立场 A
0.017 0.02671875 0.00375 0.017 立场 A
0.018 -0.001875 -0.0003125 0.018 立场 A
0.019 -0.00171875 0.00171875 0.019 立场 A

此外,分类数据中有很多NA,我希望保留它们。我能找到的所有信息都更适合不平衡数据或缺失值的插补。这也不是真正的预测,因为我真的只是对填补分类变量的时间间隙感兴趣。

r time-series categorical-data
1个回答
0
投票

从您的单帧来看,我们确实有两个 3 列框架。

quux1 <- structure(list(t_emg = c(0, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.011, 0.012, 0.013, 0.014, 0.015, 0.016, 0.017, 0.018, 0.019), CF_01 = c(-0.01796875, 0.001875, 0.00828125, -0.0125, -0.00765625, -0.01, 0.01515625, -0.01375, 0.0096875, -0.05203125, 0.1234375, -0.0596875, -0.09296875, -0.0834375, -0.009375, -0.00609375, 0.00890625, 0.02671875, -0.001875, -0.00171875), CF_02 = c(0.01234375, 0.05125, -0.04140625, -0.005625, 0.00078125, 0.02234375, -0.01296875, -0.070625,  0.1534375, 0.02984375, 0.00765625, 0.005625, -0.001875, -0.1128125, 0.0090625, 0.02, 0.0209375, 0.00375, -0.0003125, 0.00171875)), class = "data.frame", row.names = c(NA, -20L))
quux2 <- structure(list(t_kinematics = c(0, 0.002, 0.004, 0.006, 0.008, 0.01, 0.012, 0.014, 0.016, 0.018), Phase = c("swing", "swing", "swing", "swing", "swing", "swing", "swing", "stance", "stance", "stance"), stride_stop = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A")), row.names = c(NA, 10L), class = "data.frame", na.action = structure(11:20, names = c("11", "12", "13", "14", "15", "16", "17", "18", "19", "20"), class = "omit"))

使用此功能,我们将使用

findInterval
将其他列映射到时间间隔。

intvl <- findInterval(quux1$t_emg, quux2$t_kinematics)
out <- cbind(quux1, lapply(quux2[,-1], `[`, intvl))
out
#    t_emg       CF_01       CF_02  Phase stride_stop
# 1  0.000 -0.01796875  0.01234375  swing           A
# 2  0.001  0.00187500  0.05125000  swing           A
# 3  0.002  0.00828125 -0.04140625  swing           A
# 4  0.003 -0.01250000 -0.00562500  swing           A
# 5  0.004 -0.00765625  0.00078125  swing           A
# 6  0.005 -0.01000000  0.02234375  swing           A
# 7  0.006  0.01515625 -0.01296875  swing           A
# 8  0.007 -0.01375000 -0.07062500  swing           A
# 9  0.008  0.00968750  0.15343750  swing           A
# 10 0.009 -0.05203125  0.02984375  swing           A
# 11 0.010  0.12343750  0.00765625  swing           A
# 12 0.011 -0.05968750  0.00562500  swing           A
# 13 0.012 -0.09296875 -0.00187500  swing           A
# 14 0.013 -0.08343750 -0.11281250  swing           A
# 15 0.014 -0.00937500  0.00906250 stance           A
# 16 0.015 -0.00609375  0.02000000 stance           A
# 17 0.016  0.00890625  0.02093750 stance           A
# 18 0.017  0.02671875  0.00375000 stance           A
# 19 0.018 -0.00187500 -0.00031250 stance           A
# 20 0.019 -0.00171875  0.00171875 stance           A

如果你确实需要

t_kinematics
,那就从
t_emg
复制过来:

out$t_kinematics <- out$t_emg
© www.soinside.com 2019 - 2024. All rights reserved.