Magrittr 双向管道和多种条件?

Magrittr two way pipe and multiple conditions?

我正在回收别人问题的答案,但是有人可以告诉我下面的方法是否可以在进行更改之前满足多个条件吗?

library(dplyr)
library(magrittr)

df[df$tag=="ggyg",] %<>% mutate(tag="xxx")

我试过了,但没用。

 df[df$tag=="ggyg",] %<>%  df[df$h.tank==2,] %<>% mutate(tag="xxx")

我正在尝试使用上述方法,因为它可以节省大量时间,而不是使用 ifelse 语句来满足条件。

谢谢!

与其将条件加载到不同的子句中,不如将您的条件合并到一个语句中?

df[df$tag=="ggyg" & df$h.tank==2,] %<>% mutate(tag="xxx")

或者更地道一点:

df %<>% mutate(tag = ifelse(tag == "ggyg" & h.tank == 2, "xxx", tag))

这里有 2 个纯粹的 magrittr/dplyr 解决方案:

df %<>% inset(tag == "ggyg" & h.tank == 2,"tag","xxx")              # pure magrittr
df %<>% mutate(tag = inset(tag,tag == "ggyg" & h.tank == 2, "xxx"))  # magrittr & dplyr

以及一些可重现的例子:

cars2 <- head(cars)
#   speed dist
# 1     4    2
# 2     4   10
# 3     7    4
# 4     7   22
# 5     8   16
# 6     9   10

cars2 %<>% inset(.$dist==4,"speed",value=1000)
cars2 %<>% mutate(speed = inset(speed,dist==22,2000))

#   speed dist
# 1     4    2
# 2     4   10
# 3  1000    4
# 4  2000   22
# 5     8   16
# 6     9   10