2016-07-28 2 views
0

可能であれば、以下の動作をdplyrと複製したいと思います。多くの因子列をdplyrで再ラベル

私がやっていることはかなり簡単です。特定のベースラインレベルを持ついくつかの要因があります。それらを0/1変数に単純化したいと思います。

私はこのようなデータセットをシミュレートした場合:

df <- data.frame(id = 1:100, 
       x = factor(sample(c("a", "b", "c"), 100, T)), 
       y = factor(sample(c("a", "b", "c"), 100, T))) 

をそれから私は簡単にこのようにそれを達成することができます

fn <- function(x) { 
    ifelse(x == "c", 0, 1) 
} 

df[c("x", "y")] <- apply(df[c("x", "y")], 2, fn) 
df 

をしかしdplyrで、これは私を倒すようです。私はmutate_whichを使用することを考えていますが、私はfnのようなカスタム関数で動作するようには思えません。

+0

'' DF%>%に変異(X = FN(x)は、Y = FN(Y))の問題点は何? – Psidom

+0

または 'df%>%mutate_at(vars(x、y)、funs(if_else(。==" c "、0,1)))' –

答えて

1

Psidonによって掲示答え、

df %>% mutate(x = fn(x), y = fn(y)) 

は正しいが、簡単に一般化ではありません。

スティーブン・ボープレによって提案された答えは、より一般化である:

df %>% mutate_at(vars(x:y), funs(if_else(. == "c", 0, 1))) 

以上の透明バージョン、

df %>% mutate_at(.funs = function(x) {ifelse(x == "c", 0, 1)}, .cols = vars(x:y)) 

私の主な問題はあると思われ、これはmutate_eachで働いていなかったということでした段階的に廃止:

df %>% mutate_each(funs = function(x) {ifelse(x == "c", 0, 1)}, cols = vars(x, y)) 
Error: is.fun_list(calls) is not TRUE 
+0

'mutate_eachの構文は少なくとも前のバージョンとは少し異なりますバージョン。それは 'funs = ...'ではなく 'funs(...)'ではありません。だからあなたは 'mutate_each(df、funs(as.integer(。!=" c "))、x:y)'を試すことができます –

関連する問題