2017-05-23 2 views
0

두 개의 이니셜의 소음으로 세 번째 데이터 테이블을 만들고 싶습니다.두 개의 데이터 테이블을 뺍니다.

library(data.table) 
DT <- data.table(
    variable1 = c("a","b","c","d","e"), 
    variable2 = 1:5, 
    variable3 = c(1,2,5,6,8), 
    variable4 = c(1,2,5,6,8), 
    variable5 = c(1,2,5,6,8), 
    variable6 = c(12,14,18,100,103), 
    variable7 = c(0.02,0.02,0,0.02,0.02) 
) 
DT_mirror <- data.table(
    variable1 = c("a","b","c","d","e"), 
    variable2 = 1:5, 
    variable3 = c(2,2,4,6,8), 
    variable4 = c(1,3,5,6,8), 
    variable5 = c(1,2,6,6,8), 
    variable6 = c(12,14,18,100,103), 
    variable7 = c(0.02,0.02,0,0.02,0.02) 
) 
cols = sapply(DT, is.numeric) 
cols = cols[-c(6,7)] 
cols = names(cols)[cols] 
for (vars in cols) Result[,(vars)] = eval(DT[,(vars)]) - eval(DT_mirror[,(vars)]) 
for (vars in cols) Result[,(vars)] = DT[,(vars)] - DT_mirror[,(vars)] 

두 줄 모두 동일한 오류 메시지를 생성합니다. 평가에서

오류 (DT [(바르)]) - 평가 (DT_mirror [(바르)]) :
숫자가 아닌 인수 이항 연산자에

답변

2

우리가 with = FALSE을 사용할 수 있습니다

0

내가 그렇지 않은 컬럼 '결과'가정

Result[, (cols) := DT[, cols, with = FALSE]- DT_mirror[, cols, with= FALSE]] 

가 만든 또 다른 data.table입니다 추출 이것이 도움이 될 수 있는지 알고 있지만 매트릭스로 작업 할 수 있습니다.

Results = as.data.table(as.matrix(DT[,-1])-as.matrix(DT_mirror[,-1])) 


    variable2 variable3 variable4 variable5 variable6 variable7 
1:   0  -1   0   0   0   0 
2:   0   0  -1   0   0   0 
3:   0   1   0  -1   0   0 
4:   0   0   0   0   0   0 
5:   0   0   0   0   0   0 
+0

감사합니다. 나는 data.table 프레임을 유지하는 것을 선호한다. – IRT

+0

실제로 여기 "Results"는 data.table이됩니다. – Bea

관련 문제