gpt4 book ai didi

r - 条件移动最大

转载 作者:行者123 更新时间:2023-12-04 09:36:09 24 4
gpt4 key购买 nike

我是一个亲戚 R 菜鸟。

我有一个看起来像这样的大数据集:

         Tempadjvolt      newmass     rgdeltas
2794 498.5777 0.5355647187 0.00000000
2795 499.7577 0.5355647187 0.00000000
2796 500.7877 0.3415104788 -2.87487763
2797 502.1177 0.4312854788 -1.54487763
2798 500.3877 0.5355647187 0.00000000
2799 502.5377 0.4596354788 -1.12487763
2800 507.6877 0.8072604788 4.02512237
2801 505.2577 0.6432354788 1.59512237
2802 505.7977 0.6796854788 2.13512237
2803 517.8877 1.4957604788 14.22512237
2804 502.2477 0.4400604788 -1.41487763
2805 507.3677 0.7856604788 3.70512237
2806 519.7277 1.6199604788 16.06512237
2807 528.9377 2.2416354788 25.27512237
2808 520.2677 1.6564104788 16.60512237
2809 519.3877 0.5355647187 0.00000000
2810 526.5677 2.0816604788 22.90512237
2811 519.5377 0.5355647187 0.00000000
2812 526.9277 2.1059604788 23.26512237
2813 529.9877 2.3125104788 26.32512237
2814 514.4077 1.2608604788 10.74512237
2815 518.3777 1.5288354788 14.71512237

我试图确定负的 rgdeltas 值 [例如,第 2804 行],然后“看”前后 7 个位置以找到最高的 Tempadjvolt 并将第 2804 行的 tempadjvolt 设置为该局部最大值。

帧长约 4000 行,其中约 515 行是负值。我尝试了几个几乎有效的 for 循环......但也吐出了一堆 NA - 这让我认为它们的构造很差/不正确。

任何帮助将不胜感激。

正如评论中指出的那样,原始帖子不清楚。我不关心连续的负 rgdeltas 值。对于帧前端和帧尾 7 以内的负值,理想情况下,循环将在开始/结束之前向前和向后查找尽可能多的位置。在这一点上不太关心这一点。

多一点背景:
这是最初用 C# 编写的信号处理程序的一部分,我试图将其转移到 R 以增强对从环境监视器输出的大量文件的一些更轻松的批处理。我没有编写原始代码,这只是正在进行的大量工作中的一小部分。

我很感激你的帮助。谢谢!

最佳答案

1) 零填充 .假设数据帧名为DF我们使用 rollapply在zoo包中应用功能,f , 到宽度 15 的移动窗口:

library(zoo)
# columns of DF are (1) Tempadjvolt, (2) newmass and (3) rgdeltas
f <- function(x) if (x[8, 3] < 0) max(x[, 1]) else x[8, 1]
DF[[1]] <- rollapply(DF, 15, f, fill = 0, by.column = FALSE)

在上面我们用零填充开始和结束附近的点,因为处理这个的精确方法似乎并不那么重要,但我们可以使用其他一些填充值。

2) 保留最终值 .另一种可能性是只处理不在末端附近的点:
DF[seq(8, nrow(DF)-7), 1] <- rollapply(DF, 15, f, by.column = FALSE)

3) 部分 .或者我们可以使用 partial = TRUE然后取 max像这样靠近末端的部分值:
f2 <- function(x) { 
# Columns of DF2 are (1) Tempadjvolt, (2) newmass, (3) rgdeltas and (4) seq.
# Condition is TRUE if passed a partial x near the beginning.
# k is row index of current row in x. Normally 8 but near start it varies.
k <- if (x[1, 4] == 1) nrow(x) - 7 else 8
if (x[k, 3] < 0) max(x[, 1]) else x[k, 1]
}
DF2 <- cbind(DF, seq = 1:nrow(DF))
DF[[1]] <- rollapply(DF2, 15, f2, partial = TRUE, by.column = FALSE)

关于r - 条件移动最大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com