Magrittr双向管道和多种条件?

时间:2017-09-18 09:29:41

标签: r dplyr magrittr

我正在从其他人的问题中回复一个答案,但有人可以告诉我,在进行更改之前,以下方法是否可用于满足多个条件?

library(dplyr)
library(magrittr)

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

我尝试了这个,但它没有用。

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

为什么不将条件合并到一个陈述中,而不是将条件加载到不同的条款中?

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

或者更具惯用性:

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

答案 1 :(得分:2)

以下是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