【问题标题】:Creating averages across time periods创建跨时间段的平均值
【发布时间】:2023-01-12 04:59:56
【问题描述】:

我是 R 的初学者,但我有以下数据框,其中包含更多观察结果,其中我最多拥有三年 91、99、07 的每个“id”观察结果。

我想通过 'id' 创建一个变量 avg_ln_rd,如果第一个 ln_rd 观察来自 99,则取第 91 年的 'ln_rd' 和 'ln_rd' 的平均值 - 如果第一个 ln_rd 观察来自 07,则取第 99 年的平均值。

      id  year ln_rd
   <dbl> <dbl> <dbl>
 1  1013  1991 3.51 
 2  1013  1999 5.64 
 3  1013  2007 4.26 
 4  1021  1991 0.899
 5  1021  1999 0.791
 6  1021  2007 0.704
 7  1034  1991 2.58 
 8  1034  1999 3.72 
 9  1034  2007 4.95 
10  1037  1991 0.262

我也已经放弃了仅在三年中的一年中存在的任何对“id”的观察。

我的第一个想法是每年为 ln_rd 创建一个独立变量,但我仍然需要按 id 进行过滤,但我不知道该怎么做。

然后我尝试使用这些独立变量来形成一个 if 子句。

df$lagln_rd_99 <- ifelse(df$year == 1999, df$ln_rd_91, NA)

但是我又不知道如何固定“id”。

任何帮助将不胜感激。

编辑:

我使用 dplyr 按 id 分组。然后我可以按 id 对我的 df 进行排序并创建一个 ln_rd 但移动一行的新变量吗?

【问题讨论】:

  • 按照逻辑,在给定的数据集中找不到条件 1(第一个 1999 年和 1991 年出现)是否正确?
  • @AndreWildberg 抱歉,也许我措辞不当 - 最后我想为 99 年和 07 年的每个可能的 id-year 组合创建一个平均值,如下 avg_99 = (x_99+x_91)/2 或 avg_07 = (x_07+x_99) /2
  • 如果对于给定的id,第一个ln_rd观察值来自 1999 年,我们如何知道 1991 年的值是多少?
  • 如果您可以展示一些所需输出的示例以及给定数据中的计算结果,这可能会有所帮助。如果您运行 library(dplyr); df %&gt;% tidyr::complete(id, year) %&gt;% arrange(id, year) 并将该输出用作起点,它可能会更简单。您是否试图通过对其他值进行平均或从先验开始填充或其他方式来估算缺失值?
  • 我再次编辑了它,抱歉 - 我使用您的代码使我的数据更清晰。我为每个 'id' 设置了 3 个 'ln_rd' 值 - 三年。我想要的是对每个“id”(91 和 99 以及 99 和 07)的连续年份对进行平均。我只是尝试创建一个跨两个时期取平均值的变量,因为我需要进一步使用该变量。

标签: r if-statement period


【解决方案1】:

仍然有点不清楚如果所有年份都出现在一个组中该怎么办,但这可能会有所帮助

library(dplyr)

df %>% 
  group_by(id) %>% 
  arrange(id, year) %>% 
  mutate(avg91 = mean(c(ln_rd[year == 1991], ln_rd[year == 1999])), 
         avg99 = mean(c(ln_rd[year == 1999], ln_rd[year == 2007])), 
         avg91 = ifelse(any(year == 1991), avg91, NA), 
         avg99 = ifelse(any(year == 2007), avg99, NA)) %>% 
  ungroup()
# A tibble: 15 × 5
    year    id  ln_rd  avg91 avg99
   <int> <int>  <dbl>  <dbl> <dbl>
 1  1991  3505 3.38    3.09  NA
 2  1999  3505 2.80    3.09  NA
 3  1991  4584 1.45    1.34  NA
 4  1999  4584 1.22    1.34  NA
 5  1991  5709 1.90    2.13   2.74
 6  1999  5709 2.36    2.13   2.74
 7  2007  5709 3.11    2.13   2.74
 8  2007  9777 2.36   NA      2.36
 9  1991 18729 4.82    5.07   5.42
10  1999 18729 5.32    5.07   5.42
11  2007 18729 5.53    5.07   5.42
12  1991 20054 0.588   0.307 NA
13  1999 20054 0.0266  0.307 NA
14  1999 62169 1.91   NA      1.68
15  2007 62169 1.45   NA      1.68

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2020-05-20
    • 1970-01-01
    • 2012-08-16
    • 2012-08-15
    相关资源
    最近更新 更多