通过 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
我正在尝试通过 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