我有一个数据帧,包括以100Hz采样的运动信号。 以简化的方式看起来像这样:
df<-data.frame(c(0.01, 0.02, 0.05, 0.06), c(0, 0, 2, 0), c(2,3,10,15))
names(df)<-c("counter", "lostSamples", "value")
df
# counter lostSamples value
# 1 0.01 0 2
# 2 0.02 0 3
# 3 0.05 2 10
# 4 0.06 0 15
计数器“是每个样本; “lostSamples”是我的设备无法记录/存储样本的时候; “value”是相对于参考的1维实际信号
我想在丢失样本时添加行。 在这个例子中,我必须填补计数器0.3和0.4的间隙(为数据帧添加行)。 我想用NAs(更容易)填补空白,或者根据间隙前后的值通过线性函数进行插值。
我尝试使用for循环并使用apply但是没有成功。
答案 0 :(得分:2)
这可能是另一种方式
df2 = data.frame(counter = seq(0.01, 0.06, 0.01))
out = merge(df, df2, all = T)
# counter lostSamples value
#1 0.01 0 2
#2 0.02 0 3
#3 0.03 NA NA
#4 0.04 NA NA
#5 0.05 2 10
#6 0.06 0 15
答案 1 :(得分:1)
如果您有计数器的预期值列表,可以使用approx
函数进行线性插值:
expected <- seq(0.01, 0.06, 0.01)
data.frame(counter=expected,
value=approx(df$counter, df$value, expected)$y)
# counter value
# 1 0.01 2.000000
# 2 0.02 3.000000
# 3 0.03 5.333333
# 4 0.04 7.666667
# 5 0.05 10.000000
# 6 0.06 15.000000