2015-06-23 59 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'。 –

相關問題