R 基于一组条件,计算多列上每行的自定义平均值

R 基于一组条件,计算多列上每行的自定义平均值,r,R,我有一个复杂的问题,如果有人能帮助我,我将不胜感激。我有一个数据框架,由不同国家不同年份的附加调查数据组成。在上述数据框架中,我还提供了受访者所在社区的空气质量指标。空气质量数据为1998年至2016年 我的问题是,我想根据受访者的年龄和空气质量数据计算每个人的行平均值(或累积平均暴露量)。我的数据框看起来像这样 dat <- data.frame(ID=c(1:2000), dob = sample(1990:2020, size=2000, replace=TRUE),

我有一个复杂的问题,如果有人能帮助我,我将不胜感激。我有一个数据框架,由不同国家不同年份的附加调查数据组成。在上述数据框架中,我还提供了受访者所在社区的空气质量指标。空气质量数据为1998年至2016年

我的问题是,我想根据受访者的年龄和空气质量数据计算每个人的行平均值(或累积平均暴露量)。我的数据框看起来像这样

dat <- data.frame(ID=c(1:2000), dob = sample(1990:2020, size=2000, replace=TRUE),
              survey_year=rep(c(1998, 2006, 2008, 2014, 2019), times=80, each=5),
              CNT = rep(c('AO', 'GH', 'NG', 'SL', 'UG'), times=80, each=5),
              Ozone_1998=runif(2000), Ozone_1999=runif(2000), Ozone_2000=runif(2000),
              Ozone_2001=runif(2000), Ozone_2002=runif(2000), Ozone_2003=runif(2000),
              Ozone_2004=runif(2000), Ozone_2005=runif(2000), Ozone_2006=runif(2000),
              Ozone_2007=runif(2000), Ozone_2008=runif(2000), Ozone_2009=runif(2000),
              Ozone_2010=runif(2000), Ozone_2011=runif(2000), Ozone_2012=runif(2000),
              Ozone_2013=runif(2000), Ozone_2014=runif(2000), Ozone_2015=runif(2000),
              Ozone_2016=runif(2000))
上一个问题的链接


谢谢你

最后一个问题的整理步骤很有效:

tidy_data = dat %>%
  pivot_longer(
    starts_with("Ozone"),
    names_pattern = "(.*)_(.*)",
    names_to = c(NA, "year"),
    values_to = "ozone"
  ) %>% 
  mutate(year = as.integer(year))
现在,您可以按国家/年龄筛选出希望获得平均风险敞口的年份:

mean_lifetime_exposure = tidy_data %>%
  group_by(CNT, dob) %>%
  filter(year >= dob) %>%
  summarise(mean(ozone))
对不起,我不太明白你关于AO国家的第一个问题

编辑:

这是你想要的吗?逻辑有点复杂,但代码很简单

tidy_data_filtered = tidy_data %>%
  filter(
    !(CNT == "AO" & year != 1998),
    !(CNT == "SL" & !year %in% 1998:2014)
  )

先过滤数据,然后直接计算平均值怎么样?我知道有时候我会陷入一个陷阱,在一条管道里做每件事。有时候把它分成一两步比较容易。@Adam谢谢,我不太熟悉用R编码,因此有了challengethanks。我将尝试您提供的解决方案。关于AO,调查是在1998年进行的,因此该国受访者的空气质量暴露需要仅限于1998年。没有1998年以前的空气质量数据。此外,我感兴趣的结果(不在样本数据中)发生在调查年份。也就是说,后续年份的空气质量信息与模拟结果和空气质量暴露之间的关联无关,因此换句话说,对于AO,您需要过滤掉年份不是1998年的行,并删除2014年之后SL的观察值?输入数据中不会缺少这些信息吗?理想情况下,输入数据中可能会缺少这些信息。然而,汇集的调查数据和空气质量数据来自两个不同的来源。我根据采样点(用于调查)的x和y坐标以及空气质量数据将两者联系起来。空气质量数据为19年(1998年至2016年)的原始地理TIFF或光栅数据。空气质量数据和调查数据都来自本研究中使用的同一来源。我的意思是“理想情况下,它应该从……”中缺失。抱歉输入错误嘿,编辑有意义吗?
tidy_data_filtered = tidy_data %>%
  filter(
    !(CNT == "AO" & year != 1998),
    !(CNT == "SL" & !year %in% 1998:2014)
  )