gpt4 book ai didi

r - 如果值被少于 3 个位置分隔,则通过对值进行分组来查找范围高/低

转载 作者:行者123 更新时间:2023-12-01 13:53:52 25 4
gpt4 key购买 nike

我的数据由 4 列组成:日期、最低价、最高价和位置。

我试图通过根据位置字段将数据汇总到组中来找到范围。

  1. 如果 diff(position) < 3,则将数据分组在一起并将范围函数应用于每个组。
  2. 如果 diff(position) >= 3 计算当前点和前一个点的范围。

前15个位置的例子,数据的第4个字段:

c(12,14,17,18,19,20,21,22,24,28,33,36,37,38,43)

预期的结果是分组 (12,14) 然后是 (17:24), (24,28), (28,33)(33,36)(36:38),最后是(38,43) 并找到每个组的范围。

最佳答案

这是一个使用diff 来识别组之间界限的选项。

groupBy <- function(dat, thresh=3)  {
# bounds will grab the *END* of every group (except last element)
bounds <- which(! diff(dat) < thresh)

# add the last index of dat to the "stops" indecies
stops <- c(bounds, length(dat))

# starts are 1 more than the bounds. We also add the first element
starts <- c(1, bounds+1)

# mapply to get `seq(starts, stops)`
indecies <- mapply(seq, from=starts, to=stops)

# return: lapply over each index to get the results
lapply(indecies, function(i) dat[i])
}

测试:

dat1 <- c(12,14,17,18,19,20,21,22,24,28,33,36,37,38,43)
dat2 <- c(5,6,7,9,13,17,21,35,36,41)

groupBy(dat1)
groupBy(dat2)
groupBy(dat2, 5)

关于r - 如果值被少于 3 个位置分隔,则通过对值进行分组来查找范围高/低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074177/

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