2013-07-20 66 views
0

好日子,提取正長度矢量出的數據幀

我工作的一個相當大的數據集(〜1K的引導內30萬行),我試圖努力避免繁瑣的循環。對於數據框中的每一行,我需要從一列中提取矢量,並確定其最小值。矢量的長度將由另一列中的值決定。

一個小例子:

dat <- data.frame(temp = rnorm(10, 10, 2), 
        start = c(1:10), 
        end = c(3, 3, 4, 6, 6, 9, 9, 9, 10, 10)) 

以溫度爲提取源列,對於第一行,該代碼將要提取溫度[1:3]和估計它的最小值。對於第9行,溫度[9:10]將被提取並且其最小值被計算。然後將最小值的向量作爲新列添加到數據幀中。

任何建議將不勝感激。謝謝!

回答

4

這聽起來像mapply工作:

> mapply(function (from, to) min(dat$temp[from : to]), dat$start, dat$end) 
[1] 7.977614 7.977614 10.497931 7.874876 7.874876 8.866633 8.866633 
[8] 8.866633 9.828296 10.421222 
+0

太棒了!感謝您的超快速幫助。 – user2602640

1

是的,我與康拉德同意,你可以mcmapply()的並行版本中使用,從包「平行」

+0

+1,會提及這個,並忘記。 –

0

@Konrad答案是偉大的只是爲了好玩,你也可以使用apply

apply(dat, 1, function(x) min(dat$temp[x[2]:x[3]])) 

或類似這樣的

apply(dat, 1, function(x) min(dat$temp[x["start"]:x["end"]])) 
+1

不,請第一次'申請'打破了你的功能,你會知道不要在數據框中使用它。 –

+0

聽起來像你經歷了一些非常糟糕的... – dickoa

+0

'apply'將其參數轉換爲矩陣,所以如果您的df包含字符或因子變量,最終結果也將是字符,因此您的函數可能會失敗。 –