如果第三列中的值为正或负,则翻转/切换两列中的值

zer*_*rus 2 r dataframe

如果第三列中的值为负数,我想交换/切换两列中的值。

id <- c("1", "2", "3", "4", "5")
effect <- c("A", "C", "G", "A", "G")
non_effect <- c("C", "A", "T", "C", "C")
variable1 <- c("X", "X", "X", "X", "X")
variable2 <- c("Y", "Y", "Y", "Y", "Y")
value <-c("0.2", "-0.1", "-0.3", "0.5", "0.8")

df <- data.frame(id,effect,non_effect,variable1,variable2,value) 
Run Code Online (Sandbox Code Playgroud)

我会将其作为 data.frame 获取

id effect non_effect variable1 variable2 value
1  A      C          X         Y         0.2
2  C      A          X         Y        -0.1
3  G      T          X         Y        -0.3
4  A      C          X         Y         0.5
5  G      C          X         Y         0.8
Run Code Online (Sandbox Code Playgroud)

我想要的是:

id effect non_effect variable1 variable2 value
1  A      C          X         Y         0.2
2  A      C          X         Y         0.1
3  T      G          X         Y         0.3
4  A      C          X         Y         0.5
5  G      C          X         Y         0.8
Run Code Online (Sandbox Code Playgroud)

Hoe*_*elR 5

df %>%
  transform(effect = ifelse(value < 0, non_effect, effect),
            non_effect = ifelse(value < 0, effect, non_effect), 
            value = abs(as.numeric(value)))

# A tibble: 5 x 6
  id    effect non_effect variable1 variable2 value
  <chr> <chr>  <chr>      <chr>     <chr>     <dbl>
1 1     A      C          X         Y           0.2
2 2     A      C          X         Y           0.1
3 3     T      G          X         Y           0.3
4 4     A      C          X         Y           0.5
5 5     G      C          X         Y           0.8
Run Code Online (Sandbox Code Playgroud)