【发布时间】: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 %>% tidyr::complete(id, year) %>% arrange(id, year)并将该输出用作起点,它可能会更简单。您是否试图通过对其他值进行平均或从先验开始填充或其他方式来估算缺失值? -
我再次编辑了它,抱歉 - 我使用您的代码使我的数据更清晰。我为每个 'id' 设置了 3 个 'ln_rd' 值 - 三年。我想要的是对每个“id”(91 和 99 以及 99 和 07)的连续年份对进行平均。我只是尝试创建一个跨两个时期取平均值的变量,因为我需要进一步使用该变量。
标签: r if-statement period