0

再会,

我正在处理一个相当大的数据集(在 1k 引导程序中约 300k 行),并且正在努力避免繁琐的循环。对于数据框中的每一行,我需要从其中一列中提取一个向量,并确定它的最小值。向量的长度将由另一列中的值确定。

一个小例子:

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

以 temp 作为提取源列,对于第一行,代码必须提取 temp[1:3] 并估计其最小值。对于第 9 行,将提取 temp[9:10] 并计算其最小值。然后将最小值向量作为新列添加到数据框中。

任何建议将不胜感激。谢谢!

4

3 回答 3

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
于 2013-07-20T17:20:24.837 回答
1

是的,我同意 Konrad 的观点,您可以使用 mcmapply() 作为并行版本,来自包“parallel”

于 2013-07-20T17:24:16.673 回答
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"]]))
于 2013-07-20T17:31:20.437 回答