r - 如何合并列中的关闭值(mz),对 mz 列进行分组
问题描述
我请求如何合并列中的关闭值(mz)(差异小于20),对mz列进行分组,然后计算平均值?举些例子。
mz1 <- c(seq(100, 190, by = 10))
rt1 <- c(seq(1, 10, by = 1))
value1 <- runif(10, min = 100, max = 100000)
df1 <- as.data.frame(cbind(mz1, rt1, value1))
我想得到如下结果:
raw data
1 100 1 14365.72
2 110 2 41513.18
3 120 3 41431.06
4 130 4 36947.66
5 140 5 15329.23
6 150 6 13966.73
7 160 7 23380.11
8 170 8 46649.65
9 180 9 26670.67
10 190 10 85796.99
output
1 100 1 14365.72
2 110 1 41513.18
3 120 1 41431.06
4 130 2 36947.66
5 140 2 15329.23
6 150 2 13966.73
7 160 3 23380.11
8 170 3 46649.65
9 180 3 26670.67
10 190 4 85796.99
我可以使用子组信息来计算平均值,但我不知道如何根据截止值(20 或其他)对 mz 列进行子组。
谢谢半
解决方案
我想你需要这个。在所需序列上创建一个新向量,例如mz
throughaccumulate
它不会替换值,除非增加N
. 此后dense_rank
一直使用。您可以安全地使用data.table::rleid
而不是dense_rank
如果您可能会得到重复值。
set.seed(123)
mz1 <- c(seq(100, 190, by = 10))
rt1 <- c(seq(1, 10, by = 1))
value1 <- runif(10, min = 100, max = 100000)
df1 <- as.data.frame(cbind(mz1, rt1, value1))
library(tidyverse)
N <- 20
df1 %>%
mutate(sub_grp = dense_rank(accumulate(mz1, ~if(abs(.x - .y) > N) {.y} else .x)))
#> mz1 rt1 value1 sub_grp
#> 1 100 1 28828.994 1
#> 2 110 2 78851.683 1
#> 3 120 3 40956.794 1
#> 4 130 4 88313.439 2
#> 5 140 5 94052.682 2
#> 6 150 6 4651.094 2
#> 7 160 7 52857.738 3
#> 8 170 8 89252.663 3
#> 9 180 9 55188.358 3
#> 10 190 10 45715.812 4
由reprex 包于 2021-06-09 创建 (v2.0.0 )
推荐阅读
- solr - Windows 10 计算机中的 Reg Solr 错误,需要从 Windows 10 删除 Solr 并重新运行的步骤
- javascript - 调整 iframe pic 的大小以匹配布局
- django - 如何在 Django 中增加谷歌云存储对象的到期日期/时间
- javascript - 如何在javascript中计算y时间内的x事件数?
- amazon-web-services - 403 在使用 apache 和 mod_wsgi 的 AWS ec2 实例中被禁止
- c# - 在 C# 中返回与自身具有相同签名的函数
- java - JavaFX 应用程序:打印机无法打印文件
- swift - 从 Swift 中的 Set<>.index 获取位置为 int
- java - Linux 僵尸进程未使用 Java ProcessBuilder 终止
- javascript - 在反应应用程序中包含和使用 javascript 文件