2017-09-18 8 views
0

다른 사람의 질문에 대한 답변을 재활용하고 있지만 변경하기 전에 여러 가지 조건을 충족하기 위해 아래의 방법을 사용할 수 있는지 알려 줄 수 있습니까?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 문을 사용하여 조건을 충족하는 대신 많은 시간을 절약 할 수 있습니다.

감사합니다.

+0

작동하지 않는다. 당신이 원하는 것 대신에 일어나는거야? 예를 들어 잘못된 요소 수준에 대한 경고를 받고 있습니까? –

+1

'df [df $ tag == "ggyg"& df $ h.tank == 2,]'시도 했습니까? –

+0

그게 좋습니다! 여러 가지 조건을 충족시키고 행을 원하는대로 바꾸는, 내가 원했던 것을 정확하게하고있는 것 같습니다. 감사! – Dasr

답변

1

조건을 다른 절에로드하는 대신 조건을 하나의 명령문으로 결합하는 것이 좋습니다.

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

이상의 관용구 조금 :

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

그리고 어떤 재현 예 : 여기

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

2 순수 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