2017-08-29 1 views
6

は、この単純な例を考えmutate_atで新しい変数を作成します。ここで私はoo含まれているすべての列に機能ntileを適用したいオリジナルのものを維持しながら

library(dplyr) 

dataframe <- data_frame(helloo = c(1,2,3,4,5,6), 
         ooooHH = c(1,1,1,2,2,2), 
         ahaaa = c(200,400,120,300,100,100)) 

# A tibble: 6 x 3 
    helloo ooooHH ahaaa 
    <dbl> <dbl> <dbl> 
1  1  1 200 
2  2  1 400 
3  3  1 120 
4  4  2 300 
5  5  2 100 
6  6  2 100 

を、私は、これらの新しい列がなりたいですcat +対応する列。

私はこの

dataframe %>% mutate_at(vars(contains('oo')), .funs = funs(ntile(., 2))) 
# A tibble: 6 x 3 
    helloo ooooHH ahaaa 
    <int> <int> <dbl> 
1  1  1 200 
2  1  1 400 
3  1  1 120 
4  2  2 300 
5  2  2 100 
6  2  2 100 

を行うことができます知っている。しかし、私は必要なの

# A tibble: 8 x 5 
    helloo ooooHH ahaaa cat_helloo cat_ooooHH 
    <dbl> <dbl> <dbl> <int> <int> 
1  1  1 200  1  1 
2  2  1 400  1  1 
3  3  1 120  1  1 
4  4  2 300  2  2 
5  5  2 100  2  2 
6  5  2 100  2  2 
7  6  2 100  2  2 
8  6  2 100  2  2 

この

では、中間データを格納するために必要とし、元に戻ってマージされません解決策はありますデータフレーム?

答えて

13

funsの関数に名前を付けると、接尾辞として名前を付けて新しい変数を作成できます。

dataframe %>% mutate_at(vars(contains('oo')), .funs = funs(cat = ntile(., 2))) 

# A tibble: 6 x 5 
    helloo ooooHH ahaaa helloo_cat ooooHH_cat 
    <dbl> <dbl> <dbl>  <int>  <int> 
1  1  1 200   1   1 
2  2  1 400   1   1 
3  3  1 120   1   1 
4  4  2 300   2   2 
5  5  2 100   2   2 
6  6  2 100   2   2 

あなたの代わりに接頭辞としてそれをしたい場合は、その後、名前を変更するrename_atを使用することができます。

dataframe %>% 
    mutate_at(vars(contains('oo')), .funs = funs(cat = ntile(., 2))) %>% 
    rename_at(vars(contains("_cat")), funs(paste("cat", gsub("_cat", "", .), sep = "_"))) 

# A tibble: 6 x 5 
    helloo ooooHH ahaaa cat_helloo cat_ooooHH 
    <dbl> <dbl> <dbl>  <int>  <int> 
1  1  1 200   1   1 
2  2  1 400   1   1 
3  3  1 120   1   1 
4  4  2 300   2   2 
5  5  2 100   2   2 
6  6  2 100   2   2 
+1

私はいつも 'col_cat'変数の名前を変更する正規表現を書いていると思いますか? –

+0

@ℕʘʘḆḽḘ。便宜上、おそらく 'rename_at'にあります。編集の例を追加しました。 – aosmith

+0

名前の変更は、一致が含まれる列が複数ある場合にのみ追加されるように見えます。 1つの試合にも追加する方法はありますか? 例: 'dataframe%>%mutate_at(vars( 'ah')を含む)、.funs = funs(cat = ntile(。、2))' – bheavner

関連する問題