我有一个向量,我将其分成几个部分,计算每个部分的平均值,然后我想要一个具有原始长度的向量,该向量将包含平均值,并且在它们之间用NA填充。
vec <- c(1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000)
s <- 2
parts <- split(vec, rep(1:s, ceiling(length(vec) / s),
length.out = length(vec)))
the_mean <- lapply(parts, mean)
res <- unlist(the_mean)
res <- replace(NA * s, seq(from = 1 , to = length(vec), length = length(res)), res)
res
我现在收到的结果是:
4000 NA NA NA NA NA NA 5000
我想收到:
4000 NA NA 5000 NA NA NA NA
因为分裂是通过s <-2
完成的,所以我有第一个均值(4000),在2个值之后,我必须有第二个均值(5000)。其余向量应填充NA。原因是我希望结果向量的长度与初始(vec)的长度相同。
例如,如果s = 3
,则结果应为:
4000 NA NA NA 5000 NA NA 4500
。
请注意,由于向量大小为8,因此在5000和4500之间,我们有2个NA,而不是3个。
答案 0 :(得分:1)
这是一种实现方法:
apply_fun <- function(vec, s) {
#Initialize the vector with NA
ans <- rep(NA, length(vec))
#Create groups to calculate mean
groups <- rep(1:s, ceiling(length(vec) / s),length.out = length(vec))
#Create indices to place mean of each group
vals <- pmin(seq(1, by = s + 1, length.out = s), length(vec))
#Assign mean values at those indices
ans[vals] <- tapply(vec, groups, mean)
#Return the final answer
return(ans)
}
apply_fun(vec, 2)
#[1] 4000 NA NA 5000 NA NA NA NA
apply_fun(vec, 3)
#[1] 4000 NA NA NA 5000 NA NA 4500