가 여기에 내가 취급하고있어 매우 간단한 예제 값 :가중 평균 값은
data_stack <- data.table(CompA_value = c(10,20,30,40), CompB_value = c(60,70,80,80), CompC_value = c(NA, NA, NA, 100), CompA_weight = c(0.2, 0.3,0.4,0.4), CompB_weight = c(0.8,0.7,0.6,0.4), CompC_weight = c(NA, NA, NA,0.2))
CompA_value CompB_value CompC_value CompA_weight CompB_weight CompC_weight
1: 10 60 NA 0.2 0.8 NA
2: 20 70 NA 0.3 0.7 NA
3: 30 80 NA 0.4 0.6 NA
4: 40 80 100 0.4 0.4 0.2
내가 각 행에 대해, C를 통해 안돼요의 가중 평균을 계산되고 싶지 . 그러나 CompC에는 행 1-3에 대해 NAs가 있습니다. 내가 좋아하는 것은 행 1-3에 대해 CompA와 CompB의 가중 평균을 구하는 것이지만 일단 CompC가 활성화되면 계산에 자동으로 포함시키고 싶습니다.
> data_stack[, Weighted_average := CompA_value*CompA_weight + CompB_value*CompB_weight + CompC_value * CompC_weight]
> data_stack
CompA_value CompB_value CompC_value CompA_weight CompB_weight CompC_weight Weighted_average
1: 10 60 NA 0.2 0.8 NA NA
2: 20 70 NA 0.3 0.7 NA NA
3: 30 80 NA 0.4 0.6 NA NA
4: 40 80 100 0.4 0.4 0.2 68
하지만 내 "Weighted_average"열은 분명 처음 1-3 행에 대해 나에게 가중치를 부여하지 않습니다
약자로
는,이 같은 짓을했습니다.data_stack[, Weighted_average := c((10*0.2 + 60*0.8),(20*0.3 + 70*0.7),(30*0.4 + 80*0.6),(40*0.4 + 80*0.4 + 100*0.2))]
data_stack
CompA_value CompB_value CompC_value CompA_weight CompB_weight CompC_weight Weighted_average
1: 10 60 NA 0.2 0.8 NA 50
2: 20 70 NA 0.3 0.7 NA 55
3: 30 80 NA 0.4 0.6 NA 60
4: 40 80 100 0.4 0.4 0.2 68
그래서, 처음 세 행이 A와 B의 단지 가중 평균 얼마나주의,하지만 C를 사용할 수있게되면, 그것은 또한 계산에 포함되어
은 내가 원하는 것입니다.
그래서 NA 값이 있는지 여부를 판단하는 코드를 작성하는 방법을 알아보고 싶습니다. 그렇다면이를 건너 뛰고 계산에 포함시키지 마십시오.
필자는 상당히 큰 데이터 테이블을 가지므로 수동으로 수행하는 것이 좋습니다.
감사합니다. 여기
모든 NA를 0으로 바꾸고 가중 평균을 취할 수 있습니다. –
'data_stack [is.na (data_stack)] <- 0'을 사용해 보지 않겠습니까? – Aramis7d