2016-08-09 6 views
0

サンプルDFのために、データフレーム内の変数を変更しますのみ(おそらくdplyr有する)因子のいくつかのレベル

df <- data.frame(x = c(runif(10,0,2*pi),runif(10,0,360)), group = gl(n = 2, k = 10, labels =c("A","B"))) 

は私はグループA(度に変換する)ためxを変更します。 baseで、私はちょうど行います

df <- within(df,x[group == "A"] <- x[group == "A"]*180/pi) 

dplyrでこれを行う方法があるかもしれません場合、私は思っていました。これは間違っている:

df <- df %>% filter(group == "A") %>% mutate(x = x*180/pi) 

それはdfgroup == "A"のサブセットのみを返すため。これを行う簡単な方法がありますか、またはこれはbaseが使いやすさのためにdplyrを誇示するケースですか?

答えて

3

ifelseを使用して論理条件を作成し、これに基づいて算術計算またはelseが元の値を返します。

df %>% 
    mutate(x = ifelse(group=="A", x*180/pi, x)) 

または言及@AlexIoannidesとしてtypeが世話をしなければならないように、dplyrからif_elseを使用することができます。 data.table


、これは場所に代入することによって行うことができ、より効率的でなければなりません。

library(data.table) 
setDT(df)[group=="A", x := x*180/pi] 
+1

さらに、 'base'よりも単純です。ありがとう! – DeltaIV

+3

'dplyr'は、使用する価値のある' ifelse' - 'if_else'の独自の型セーフ(r)版です。 –

関連する問題