2017-09-18 5 views
0

私は他の人の質問から回答をリサイクルしていますが、変更する前に複数の条件を満たすために以下のアプローチを使用できるかどうか教えてもらえますか?マグリット2ウェイパイプと複数の条件?

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

条件を異なる句にロードするのではなく、条件を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