首页 > 解决方案 > 删除特定行之前的观察

问题描述

我有一个数据框,我想计算整个value期间变量的平均值,不包括危机之前/之后的两个观察值1(我不关心缺少 val)。计算应按国家/地区进行(即使在下面的示例中我只有一个国家)。例子:

country <- rep("AT",10)
value <- seq(1,10,1)
crisis <- c(0,0,0,NA,0,1,0,NA,0,0)

df <- data.frame(country, value, crisis)
df


mean(df$value[df$crisis == 0], na.rm=TRUE)

# expected result

exp_mean <- (1+2+3+9+10)/5
exp_mean

edit:

我想得到一个一般情况,我们考虑数据集中其他可能的 1,例如,如果我们有

crisis[10] = 1 结果应该是(3+9)/2

为了不考虑第一次危机之后的时期,但实际上在第二个时期经历了危机。任何想法?

标签: r

解决方案


另一种基本 R 解决方案,使用++outer过滤掉行,即cunique

r <- mean(na.omit(df[-unique(c(outer(which(df$crisis==1),-2:2,"+"))),"value"]))

这样

> r
[1] 5

推荐阅读