gpt4 book ai didi

r - 向量内的平均邻居

转载 作者:行者123 更新时间:2023-12-04 02:01:05 25 4
gpt4 key购买 nike

我的数据:

data <- c(1,5,11,15,24,31,32,65)

有2个邻居: 31 和 32 .我希望删除它们并仅保留平均值(例如 31.5 ),这样数据将是:
data <- c(1,5,11,15,24,31.5,65)

这看起来很简单,但我希望自动完成,有时使用包含更多邻居的向量。例如 :
data_2 <- c(1,5,11,15,24,31,32,65,99,100,101,140)

最佳答案

这是另一个通过 cumsum(c(TRUE, diff(a) > 1)) 创建 id 的想法,其中 1显示间隙阈值,即

#our group variable
grp <- cumsum(c(TRUE, diff(a) > 1))

#keep only groups with length 1 (i.e. with no neighbor)
i1 <- a[!!!ave(a, grp, FUN = function(i) length(i) > 1)]

#Find the mean of the groups with more than 1 rows,
i2 <- unname(tapply(a, grp, function(i)mean(i[length(i) > 1])))

#Concatenate the above 2 (eliminating NAs from i2) to get final result
c(i1, i2[!is.na(i2)])
#[1] 1.0 5.0 11.0 15.0 24.0 65.0 31.5

您也可以将其包装在一个函数中。我把间隙留作参数,这样你就可以调整了,
get_vec <- function(x, gap) {
grp <- cumsum(c(TRUE, diff(x) > gap))
i1 <- x[!!!ave(x, grp, FUN = function(i) length(i) > 1)]
i2 <- unname(tapply(x, grp, function(i) mean(i[length(i) > 1])))
return(c(i1, i2[!is.na(i2)]))
}

get_vec(a, 1)
#[1] 1.0 5.0 11.0 15.0 24.0 65.0 31.5

get_vec(a_2, 1)
#[1] 1.0 5.0 11.0 15.0 24.0 65.0 140.0 31.5 100.0

数据:
a <- c(1,5,11,15,24,31,32,65)
a_2 <- c(1, 5, 11, 15, 24, 31, 32, 65, 99, 100, 101, 140)

关于r - 向量内的平均邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53704926/

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