2016-10-18 3 views
3

는 다음 코드를 살펴 값 :업데이트 열 값은

library(data.table) 
dataT <-data.table(1:15,runif(15),runif(15),runif(15)) 

for(vrb in names(dataT)) { 
    dataT[get(vrb) < 0.5, (vrb):=0.5] # update value 
} 

로서 코드로부터 추론 될 수있다 , I는 기본적으로 0.5 각 열의 가장 낮은 값을 캡핑하고있다. 행을 부분 집합하려면 get 함수를 사용했습니다.

올바른 방법인가요? 또는 다른 방법으로 data.table에 더 정렬되어 있습니까?

답변

2

우리는 첫 번째 열에 set

for(vrb in names(dataT)){ 
set(dataT, i = which(dataT[[vrb]] < 0.5), j = vrb, value = 0.5) 
} 

요소를 사용할 수는> 0.5이다. 그래서 우리는이 업데이트 전에 먼저 서브 세트하지 않는 약간의 성능 저하가있을 수 있습니다 첫 번째

for(vrb in names(dataT)[-1]){ 
    set(dataT, i = which(dataT[[vrb]] < 0.5), j = vrb, value = 0.5) 
} 
0

제외하고 컬럼에 set을 적용 할 수 있습니다,하지만 난 그게 더 읽기 찾기 :

dataT[, colnames(dataT) := lapply(.SD, pmax, .5)][]