多条件for循环

gcuhipw9  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(171)

我有一个大约有5000行的数据库,如果几个条件都为真,我想用一种特殊的方式更改一列中的数据。如果条件不为真,值将保持不变。数据框如下所示:

> testdata
      A  B  C  D  E  F  G
row1 10 10 50 10 50 70 50
row2 10 10 50 70 50 40 60
row3 30 10 50 70 30 20 50
row4 30 30 50 10 10 50 30
row5 10 10 30 10 30 60 40
...

我的计划是在特殊情况下改变G列中的数据,如下所示:
如果A = 10,B = 10,C = 50,D = 10,E = 50,F = 70,则计算G-10
如果A = 10且B = 10且C = 50且D = 70且E = 50且F = 40,则计算G-20
如果A = 30,B = 30,C = 50,D = 10,E = 10,F = 50,那么G就保持不变......依此类推
我试过写一个for循环代码,但是到目前为止还没有成功,网上关于这个主题的其他讨论也帮不上我的忙。我完全不知道如何写正确的代码,因为我是RStudio的初学者。
希望你能帮助我!

2nc8po8w

2nc8po8w1#

testdata <- 
  tibble::tribble(
    ~A,  ~B,  ~C,  ~D,  ~E,  ~F,  ~G,
     10, 10, 50, 10, 50, 70, 50,
     10, 10, 50, 70, 50, 40, 60,
     30, 10, 50, 70, 30, 20, 50,
     30, 30, 50, 10, 10, 50, 30,
     10, 10, 30, 10, 30, 60, 40
  )

library(dplyr)
mutate(testdata, outcome = 
         case_when(
           A == 10 & B == 10 & C == 50 & D == 10 & E == 50 & F == 70 ~  G - 10,
           A == 10 & B == 10 & C == 50 & D == 70 & E == 50 & F == 40 ~  G - 20,
           A == 30 & B == 10 & C == 50 & D == 10 & E == 50 & F == 50 ~  G
         ))

你只需要在最后一个条件之后继续你的条件。

# A tibble: 5 × 8
      A     B     C     D     E     F     G outcome
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>
1    10    10    50    10    50    70    50      40
2    10    10    50    70    50    40    60      40
3    30    10    50    70    30    20    50      NA
4    30    30    50    10    10    50    30      NA
5    10    10    30    10    30    60    40      NA

相关问题