2017-02-14 6 views
0

변환 함수의 일부를 변수 입력으로 대체하려고합니다.함수의 일부를 변수 입력으로 대체

나는 기존의 테이블에서 COL1과 하위 집합을 사용하여 DF 만든

:

A = c(1, 3) 
B = c(3, 1) 
C = c(5, 2) 
df = data.frame(A, B, C) 

내가 지금 수동과 같을 것이다 계산을 자동화 할 :

col1 = c('A','B','C') 

df라는이 같이 보입니다를 이 :

df <- transform(df, 'ABC' = (A + B + C)) 

여기에서 (A + B + C)는 df의 열을 나타냅니다. 나는 수백 개의 'col1'을 가지고 있기 때문에 나는 그것을 손으로 할 수 없다. 나는 % s (Python 2.X에서 사용 가능)와 비슷한 것을 사용하려고 시도했지만, 아직까지는 아무 것도 작동하지 않았고, R이 너무 적어 eval()과 관련이있다. .formula, sprintf, substitute 등).

cv (col1)을 사용하여 출력을 변환 함수에 붙여 넣으려고했으나, 가장 많이 얻은 것은 as.formula를 사용할 때 환경 (열이 아닌)에서 값을 가져 오려고 변환하는 것입니다.

cv = function(var){ 
    output = paste('(', paste(var, collapse = ' + '), ')', sep = '') 
    return(output) 
} 

어떤 힌트 나 아이디어라도 주시면 감사하겠습니다.

답변

2

너는 이상한 구석에 너 자신을 기동시켰다.

cols <- c("A", "B", "C") 
df[, paste(cols, collapse = "")] <- rowSums(df[, cols]) 
#alternatively for other binary functions: 
#Reduce("+", df[, cols]) 
# A B C ABC 
#1 1 3 5 9 
#2 3 1 2 6 
+0

오, 소년 .. 정말 고마워요! – Daan11

+0

'Reduce' 솔루션이 너무 좋습니다. –

0

당신은 dplyr에서 mutate을 사용하여 비슷한 효과를 얻을 수 있습니다 : 이것은 R과 쉽게 여기

library(dplyr) 
cols <- c("A", "B", "C") 
df %>% mutate_(.dots = setNames(paste(cols, collapse = '+'), 
           'new_column_name')) 

우리가합니다 (_ 자리) mutate_에게 "A+B+C"를 얻을 수 paste()를 통해 무엇을해야 하는지를, 그리고 setNames을 사용하여 새 열의 이름을 지정하십시오.

문법이 다소 복잡하다는 점을 인정하지만, non-standard evaluationdplyr과 관련이 있습니다. 그러나 dplyr 생태계에서이를 수행하려는 경우이를 수행하는 방법입니다.