gpt4 book ai didi

r - 计算一系列行的平均值

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

给定一个这样的数据框:

A <- c(1,2,3,4,NA,6,7,8,9,10,11,12,13,14,15)
B <- c(NA,NA,NA,20,NA,NA,NA,15,NA,NA,NA,NA,11,NA,9)
DF <- data.frame(A, B)

我想根据 B 列中的值计算 A 列中一系列值的平均值。具体来说,每当 B 列中有一个非 NA 值时,我想计算A 列上方第 2 行和下方第 2 行的范围。

例如,B列第一个非NA值是20。所以我想计算上面两行(2, 3),下面两行(NA, 6)和相邻行的平均值(4).所以:

mean(2,3,4,NA,6)

类似地,B 行中的下一个非 NA 值是 15。这将是

mean(6,7,8,9,10)

因此,整个数据框的最终结果将是一个新列 C

DF$C <- c(NA,NA,NA,3.75,NA,NA,NA,8,NA,NA,NA,NA,13,NA,14)

最佳答案

您可以尝试以下方法。

nona <- !is.na(DF$B)
DF$C <- replace(
DF$B,
nona,
vapply(which(nona), function(i) {
ii <- (i-2):(i+2)
mean(DF$A[ii[ii > 0]], na.rm = TRUE)
}, 1)
)

我们在这里找到 B 列中的非 NA 值,然后使用该向量为我们想要在 A 列中找到平均值的值设置索引,注意删除任何可能出现的负下标B 列的前一个或两个值不是 NA。上面的代码给出了 DF 的以下结果。

    A  B     C
1 1 NA NA
2 2 NA NA
3 3 NA NA
4 4 20 3.75
5 NA NA NA
6 6 NA NA
7 7 NA NA
8 8 15 8.00
9 9 NA NA
10 10 NA NA
11 11 NA NA
12 12 NA NA
13 13 11 13.00
14 14 NA NA
15 15 9 14.00

关于r - 计算一系列行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33880954/

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