2017-12-13 15 views
0

df의 여러 열을 변경하고 각 recoded 변수에 대해 새 열을 생성하는 함수를 작성하려고합니다. 이 경우에 나는 실행중인 돌연변이가 15 열의 각 요소를 뺍니다. 세 열에 대해 다음 코드를 작성할 수 있었지만, 앞으로는 20 열 이상을 실행하려고합니다. 새로운 컬럼 이름을 쓰는 것은 (당신이 mutate에서하는 것처럼) 부담 스럽습니다. 어떤 도움이라도 대단히 감사하겠습니다. recode 또는 mutate 함수로 작업하여 새로운 열을 생성 할 수는 없습니다.여러 열을 df의 새 열을 만들려면 recode

DF2 < - 돌연변이 (DF1, new_col1 = 15 old_col1, new_col2 = 15 - old_col2, new_col3 = 15 - old_col3)

+0

당신은 그것을 위해 mutate_all()를 사용할 수 있습니다 예를 들어, 열만 2와 3에 돌연변이를 실행합니다. – sb0709

답변

0

data.table 솔루션, 당신은 * (참조 열을 모두 변이 할 가정 더 유연한 버전을 보려면 아래를 참조하십시오).

* @ sb0709 주석에 언급 된대로 mutate_all도 마찬가지입니다. 제공

library(data.table) 
df <- data.table(old_col_1 = 20:24, 
        old_col_2 = 55:49, 
       old_col_3 = rnorm(5, 100, 30)) 

df[ , sub("old", "new", names(df)) := lapply(.SD, function(x) 15-x) ] 

:

R> df 
    old_col_1 old_col_2 old_col_3 new_col_1 new_col_2 new_col_3 
1:  20  55 86.29104  -5  -40 -71.29104 
2:  21  56 144.21564  -6  -41 -129.21564 
3:  22  57 104.84574  -7  -42 -89.84574 
4:  23  58 93.18084  -8  -43 -78.18084 
5:  24  59 104.96188  -9  -44 -89.96188 

당신은 모든 열 미만을 선택합니다, 당신은 단지 names 벡터와 .SD 목록을 부분 집합해야합니다.

df[ , sub("old", "new", names(df)[2:3]) := lapply(.SD[,2:3], function(x) 15-x) ] 

대신 제공 :

R> df 
    old_col_1 old_col_2 old_col_3 new_col_2 new_col_3 
1:  20  55 138.28667  -40 -123.28667 
2:  21  56 69.03836  -41 -54.03836 
3:  22  57 147.39790  -42 -132.39790 
4:  23  58 88.15505  -43 -73.15505 
5:  24  59 28.96437  -44 -13.96437