gpt4 book ai didi

r - 根据列中的范围组合行

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

我有一个非常大的数据集,其中有一列以秒为单位的时间,我想将时间接近的行(范围:相隔 .1-.2 秒)合并为一个平均值。

以下是数据外观的示例:

BPM seconds
63.9 61.899
63.9 61.902
63.8 61.910
62.1 130.94
62.1 130.95
61.8 211.59
63.8 280.5
60.3 290.4

所以我想合并前 3 行,然后是后面的 2 行,其余的将独立存在。这意味着我希望数据看起来像这样:
BPM seconds
63.9 61.904
62.1 130.95
61.8 211.59
63.8 280.5
60.3 290.4

最佳答案

我们需要创建组,这是重要的一点,其余的是标准聚合:

cumsum(!c(0, diff(df1$seconds)) < 0.2)
# [1] 0 0 0 1 1 2 3 4

然后使用聚合进行聚合:
aggregate(df1[, 2], list(cumsum(!c(0, diff(df1$seconds)) < 0.2)), mean)
# Group.1 x
# 1 0 61.90367
# 2 1 130.94500
# 3 2 211.59000
# 4 3 280.50000
# 5 4 290.40000

或者使用 dplyr:
library(dplyr)

df1 %>%
group_by(myGroup = cumsum(!c(0, diff(seconds)) < 0.2)) %>%
summarise(BPM = first(BPM),
seconds = mean(seconds))
# # A tibble: 5 x 3
# myGroup BPM seconds
# <int> <dbl> <dbl>
# 1 0 63.9 61.9
# 2 1 62.1 131.
# 3 2 61.8 212.
# 4 3 63.8 280.
# 5 4 60.3 290.

可重现的示例数据:
df1 <- read.table(text = "BPM seconds
63.9 61.899
63.9 61.902
63.8 61.910
62.1 130.94
62.1 130.95
61.8 211.59
63.8 280.5
60.3 290.4", header = TRUE)

关于r - 根据列中的范围组合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52603398/

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