我试图用 R 中另一列的相对行值填充表格列。我有一个带有两个数据列(Col1,Col2)和两个点值列(P1,P2)的表。填充了Data1,没有填充Data2。我希望根据数据1的相对值,用P1或P2中的值填充Data2的值。在给定的行中,如果Data1的先前值高于其当前值,则填充Data2单元格通过P1中的值。如果Data1的先前值低于其当前值,则Data2单元格将由P2中的值填充。为了说明我要做什么,我提供了两个示例表。第一个表是我所拥有的(未填充Data2),第二个表是所需的结果。
表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 中是否有内置功能可以实现此目的?如果没有,那么关于如何创建一个的任何建议?
答案 0 :(得分:0)
使用tidyverse
的解决方案:
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