2017-08-29 12 views
6

bu basit örneği inceleyin mutate_at ile yeni değişkenler oluşturma: İşte oo içeren tüm sütunlara fonksiyonunu ntile uygulamak istediğinizorijinal olanları tutarken

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 

ama bu yeni sütunlar olmak istiyorum cat + ilgili sütunu çağırdı.

ben bu Ama benim ihtiyacım olan

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 

yapabileceğini biliyorum bu

# 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 

ara verilerini saklamak için gerektirir ve orijinaline geri birleştirme DEĞIL bir çözüm var mı veri çerçevesi?

cevap

13

funs'daki işlevlere adlar eklenmiş olarak yeni değişkenler eklemek için adlar ekleyebilirsiniz. Bunun yerine bir önek olarak isterseniz

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 

, daha sonra isimlerini değiştirmek için rename_at kullanabilirsiniz.

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

Sanırım her zaman 'col_cat' değişkenlerinin adını değiştirmek için bazı normal ifadeler yazılabilir mi? –

+0

@ ℕʘʘḆḽḘ Yep. Muhtemelen 'rename_at' kolaylık için; düzenlemede örnek eklendi. – aosmith

+0

Yeniden adlandırma, yalnızca bir eşleşme içeren birden fazla sütun varsa ekleme yapar. Tek bir eşleşme için de eklemenin bir yolu var mı? Örnek: 'dataframe%>% mutate_at (vars (içerir ('ah')), .funs = eğlenceler (cat = ntile (., 2))) – bheavner

İlgili konular