r - 在 R 中集成采样数据

标签 r integration interpolation measurement

我有一些随时间采样的测量数据,想整合它,test dataset包含约 100000 个样本(约 100 秒,1000Hz)的数据。

我的第一个方法是(table 包含时间戳(0..100s)和每个数据点的值(都是 doubles))

# test dataset available (gzipped, 720k) here: http://tux4u.de/so.rtab.gz
table <- read.table("/tmp/so.rtab", header=TRUE)
time <- table$t
data <- table$val
start <- min(time)
stop <- max(time)
sampling_rate <- 1000
divs <- (max(time) - min(time)) * sampling_rate
data_fun <- approxfun(time, data, method="linear", 0, 0)
result <- integrate(data_fun, start, stop, subdivisions=divs)

但不知何故集成会永远运行(就像一个无限循环,完全耗尽一个 CPU)。所以我查看了这些值:

> start
[1] 0
> stop
[1] 98.99908
> divs
[1] 98999.08

奇怪的是,当我评估

> integrate(data_fun, 0, 98, subdivisions=100000)$value + integrate(data_fun, 98, 99)$value
[1] 2.640055

它有效(计算时间<3s)但下面的评估(应该是相同的)

> integrate(data_fun, 0, 99, subdivisions=100000)$value

也永远不会终止。甚至这个(实际上是上面工作的一个子积分)也不会终止:

> integrate(data_fun, 0, 89, subdivisions=100000)$value

对我来说,它何时有效以及何时无效似乎有点随机。我做错了什么或者我能以某种方式改进流程吗?

谢谢!

(提示:采样点不一定均匀分布)

最佳答案

Ekhem,你知道你可以总结一下吗? cumsum 将快速执行此操作:

cumsum(table$val)*diff(table$t)[1]

对于不等差,你可以使用:

cumsum(table$val[-nrow(table)]*diff(table$t))

不需要更复杂的数字,因为这种情况下的数据采样非常密集;尽管如此,总会有比通过插值器更好的方法。

关于r - 在 R 中集成采样数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552844/

相关文章:

python - 在 Python 中插值 3d 数组扩展

r - 并行进程的共享内存

r - MongoDB-ISODate

根据时间范围变量重复行 - R

post - 我需要使用服务器集成中的 paypal createorder 函数将我的金额从应用程序传递到 Paypal。我怎样才能通过 body 的数量。?

.net - ColdFusion .Net 集成错误 : DotNetExtension not installed

matlab - 使用梯形规则计算二重积分 (Matlab)

javascript - 使用 step-before 或 step-after 插值时的 D3 线型

c# - 使用资源中的变量进行字符串插值

r - 如何在 R 中使用 ggplot 添加 "grouped"标签?