首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除某些行之前的观察值

删除某些行之前的观察值
EN

Stack Overflow用户
提问于 2020-02-07 18:34:54
回答 3查看 76关注 0票数 1

我有一个数据框,我想要计算除+-两个观察值之前/之后的所有时间段的变量value的平均值(我不关心是否缺少val)。计算应按国家/地区进行(尽管在下面的示例中我只有一个国家/地区)。示例:

代码语言:javascript
运行
复制
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

为了不考虑第一次危机之后的时期,但实际上在第二次危机中经历了一次危机。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2020-02-07 19:07:10

另一个基础R解决方案,使用outer + c + unique来过滤出行,即,

代码语言:javascript
运行
复制
r <- mean(na.omit(df[-unique(c(outer(which(df$crisis==1),-2:2,"+"))),"value"]))

这样的话

代码语言:javascript
运行
复制
> r
[1] 5
票数 3
EN

Stack Overflow用户

发布于 2020-02-07 18:41:02

我们可以编写一个函数,它排除crisis = 1之后的+- 2观测值的变量。

代码语言:javascript
运行
复制
custom_mean <- function(c, v) {
   inds <- which(c == 1)
   mean(v[-unique(c(sapply(inds, `+`, -2:2)))], na.rm = TRUE)
}

假设一个国家/地区可能存在多个crisis = 1情况,则使用sapply

然后,我们可以将此函数应用于每个country

代码语言:javascript
运行
复制
library(dplyr)
df %>% group_by(country) %>% summarise(exp_mean = custom_mean(crisis, value))

# A tibble: 1 x 2
#  country exp_mean
#  <fct>      <dbl>
#1 AT             5
票数 2
EN

Stack Overflow用户

发布于 2020-02-07 18:48:05

只要'crisis == 1‘只有一个值,并且在'crisis == 1’行的前后始终有两行,这种使用base R的解决方案就有效。

代码语言:javascript
运行
复制
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

df[(which(df$crisis == 1) - 2):(which(df$crisis == 1) + 2), ]

此解决方案不适用于此数据的:

代码语言:javascript
运行
复制
country <- rep("AT",11)
value <- seq(1,11,1)
crisis <- c(0,0,0,NA,0,1,0,NA,0,0,1)

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


df2[(which(df2$crisis == 1) - 2):(which(df2$crisis == 1) + 2), ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60111690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档