2015-06-23 62 views
2

我有一个数据帧,包括以100Hz采样的运动信号。 在简化的方式,它看起来像这样:R:根据列值在数据帧中添加行

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”是当我的设备无法记录/存储样本时; “值”是相对于参考的一维中的实际信号

我想在丢失样本时添加行。 在这个例子中,我必须为计数器0.3和0.4填补空白(为数据框添加行)。 我想用NAs填补空白(更简单),或者根据差距前后的值通过线性函数进行插值。

我尝试使用for循环和适用,但没有成功。

回答

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 
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 
+0

尼斯,简单的方法,尽管在这里你需要小心浮点舍入问题。 – josliber

+0

@josilber是的你是对的!我喜欢在你的答案中使用'approx'。 –

相关问题