通过 R 中另一列的相对行值填充 table 列

Populate table column by relative row values of another column in R

我正在尝试通过 R 中另一列的相对行值填充 table 列。我有一个包含两个数据列(Col1、Col2)和两个点值列(P1、P2)的 table。 Data1 已填充,Data2 未填充。我希望 Data2 的值根据数据 1 的相对值由 P1 或 P2 中的值填充。在给定行中,如果 Data1 的先前值高于其当前值,则填充 Data2 单元格由 P1 中的值。如果 Data1 的先前值低于其当前值,则 Data2 单元格将由 P2 中的值填充。为了说明我正在尝试做什么,我提供了两个示例 table。第一个 table 是我所拥有的(Data2 未填充),第二个 table 是期望的结果。

表1(我有的)

+-----+----+----+-------+-------+
| FID | P1 | P2 | Data1 | Data2 |
+-----+----+----+-------+-------+
|   1 | A  | B  |    50 |       |
|   2 | C  | D  |    40 |       |
|   3 | E  | F  |    60 |       |
|   4 | G  | H  |    70 |       |
|   5 | I  | J  |    65 |       |

表 2(期望的结果)

+-----+----+----+-------+-------+
| FID | P1 | P2 | Data1 | Data2 |  
+-----+----+----+-------+-------+
|   1 | A  | B  |    50 | NA    |  
|   2 | C  | D  |    40 | C     |  
|   3 | E  | F  |    60 | F     |  
|   4 | G  | H  |    70 | H     |  
|   5 | I  | J  |    65 | I     |  
+-----+----+----+-------+-------+

R 中是否有内置函数来完成此操作?如果没有,关于如何创建一个有什么建议吗?

使用 dplyr 的解决方案可能是:

df %>%
 mutate(Data2 = ifelse(lag(Data1) > Data1, paste0(P1), paste0(P2)))

  FID P1 P2 Data1 Data2
1   1  A  B    50  <NA>
2   2  C  D    40     C
3   3  E  F    60     F
4   4  G  H    70     H
5   5  I  J    65     I