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

时间:2018-12-04 20:36:36

标签: r populate

我试图用 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 中是否有内置功能可以实现此目的?如果没有,那么关于如何创建一个的任何建议?

1 个答案:

答案 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