r - 删除特定行之前的观察
问题描述
我有一个数据框,我想计算整个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 解决方案,使用++outer
过滤掉行,即c
unique
r <- mean(na.omit(df[-unique(c(outer(which(df$crisis==1),-2:2,"+"))),"value"]))
这样
> r
[1] 5
推荐阅读
- ssl - 为特定 CA 安装证书,或了解现有证书为何不起作用
- docker - docker run --name vs --hostname 作为命令行选项的区别(ping:错误地址)
- objective-c - OS X - 应用程序无法打开,因为当捆绑包包含新版本的第三方可执行文件时无法确认开发者的身份
- azure - Azure 容器实例传出 IP 范围
- android - Android 架构组件:LiveData as Service 观察者
- javascript - 将 JSON 值动态传递给另一个模板
- vb.net - VB.net 平铺图形绘图 - 等距
- scrapy - 使用缓存时如何在scrapy中重新抓取带有4xx错误代码的页面?
- http - 在 Racket servlet 上启用 CORS
- node.js - Node、Webpack:你可能需要一个合适的加载器来处理这种文件类型