저는 R을 배우고 있는데 불필요한 기능 (불필요한 테이블 열)을 제거하려는 R 데이터 테이블이 있습니다. 이를 위해 CORElearn 패키지의 ReliefexpRank 알고리즘을 사용하고 있으며 테이블과 원본 테이블은 R 테이블입니다.
library(CORElearn)
estRelifF <-attrEval(FLAG_READMITIDO_MEAN ~.,table,estimator="ReliefFexpRank",ReliefIterations=30)
for( i in estRelifF ){
if(estReliefF[i]==0) {originaltable[i]<-NULL}
}
output <-data.frame (estReliefF)
estReliefF가 올바른 결과를 가지고 있다는 것을 알고 있으며 각 기능에 대해 아래 샘플과 같은 결과를 얻습니다.
LOCAL
-4.428817e-01
HORA
0.000000e+00
그리고 0 인 Hora를 제거하고 싶습니다.
나는 RI를 처음 사용하기 때문에 실수를 찾을 수없는 것 같아서 도움을 주시면 감사하겠습니다. IF 문 주변에있는 것 같지만 문제가 무엇인지 모르겠습니다.
문제는 열에 대해 루프를 실행하는 동안 열을 수정하는 데서 발생합니다. 벡터와 테이블이 다음과 같다고 가정 해 보겠습니다.
x<-c(1,1,0,1,0)
df<-data.frame(1:5,2:6,3:7,4:8,5:9)
을 실행 for(i in 1:5){if(x[i]==0){df[i]<-NULL}}
하면 세 번째 열이 제거되었지만 다섯 번째 열은 제거되지 않은 것을 볼 수 있습니다. 세 번째 열이 제거 된 후 다섯 번째 열은 더 이상 다섯 번째 열이 아니라 네 번째 열이되고 x[4]
null이 아니기 때문입니다.
삭제하기 전에 원치 않는 모든 열을 찾아야합니다. 가능한 해결책은 다음과 같습니다.
df[-which(x==0)]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다