2017-12-25 25 views
2

일부 열의 로그를 가져오고 모두 log [original column name]이라는 새 열을 만들고 싶습니다.dplyr mutate를 사용하여 열 이름 벡터를 기반으로 새 열을 만듭니다.

아래의 코드는 작동하지만 어떻게 columnstolog이라는 벡터를 돌연변이로 전달할 수 있습니까? 고맙습니다.

library(dplyr) 
data(mtcars) 

columnstolog <- c('mpg', 'cyl', 'disp', 'hp') 

mtcars %>% mutate(logmpg = log(mpg)) 
mtcars %>% mutate(logcyl = log(cyl)) 

답변

7

사용 mutate_at, 원래 열 이름에 추가되는 _log에 견딜 수있는 경우 : "사용 dplyr"부분을 무시

mtcars %>% mutate_at(columnstolog, funs(log = log(.))) 

# mpg cyl disp hp drat wt qsec vs am gear carb mpg_log cyl_log disp_log hp_log 
#1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 3.044522 1.791759 5.075174 4.700480 
#2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 3.044522 1.791759 5.075174 4.700480 
#3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 3.126761 1.386294 4.682131 4.532599 
#4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 3.063391 1.791759 5.552960 4.700480 
#5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 2.928524 2.079442 5.886104 5.164786 
# ... 
2

...

require(data.table)  

mtcars <- as.data.table(mtcars) 

mtcars[, paste0('log', columnstolog) := lapply(.SD, log), .SDcols = columnstolog] 
1

당신은 할 수 또한 rowwisedplyr 패키지에서 사용하십시오.

mtcars %>% 
    rowwise %>% 
    mutate(logmpg = log(mpg), 
     logcyl = log(cyl)) 


# A tibble: 32 x 13 
    mpg cyl disp hp drat wt qsec vs am gear carb logmpg logcyl 
    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
1 21.0  6 160.0 110 3.90 2.620 16.46  0  1  4  4 3.044522 1.791759 
2 21.0  6 160.0 110 3.90 2.875 17.02  0  1  4  4 3.044522 1.791759 
3 22.8  4 108.0 93 3.85 2.320 18.61  1  1  4  1 3.126761 1.386294 
4 21.4  6 258.0 110 3.08 3.215 19.44  1  0  3  1 3.063391 1.791759 
5 18.7  8 360.0 175 3.15 3.440 17.02  0  0  3  2 2.928524 2.079442 
6 18.1  6 225.0 105 2.76 3.460 20.22  1  0  3  1 2.895912 1.791759 
7 14.3  8 360.0 245 3.21 3.570 15.84  0  0  3  4 2.660260 2.079442 
8 24.4  4 146.7 62 3.69 3.190 20.00  1  0  4  2 3.194583 1.386294 
9 22.8  4 140.8 95 3.92 3.150 22.90  1  0  4  2 3.126761 1.386294 
10 19.2  6 167.6 123 3.92 3.440 18.30  1  0  4  4 2.954910 1.791759 
# ... with 22 more rows 
+0

감사합니다. @ blazej. 벡터를 추가하는 방법이 있습니까 : 'columnstolog <- c ('mpg', 'cyl', 'disp', 'hp') ' 그리고 나서 rowwise와 mutate를 사용하여 그 벡터의 열? – RAndStata

+0

아, 죄송합니다 -'columnstolog'를 가진 부분을 필수로 잡지 않았습니다. ** ** 가능할 수 있지만, 나는 실제 사례를 이해할 수 없습니다. – blazej