220k 행의 데이터 프레임 (mydata)이 있고 각 행에 대해 1 열 (BRLABELS)에 8 개의 if 문을 수행하고 싶습니다. 간단한 if / else if 절차가 약 5 분 걸렸고 속도를 높이고 싶었습니다.
나는 이와 같은 스위치 기능 방법을 시도했다. 처음에는 정의했습니다
group_label<-function(x){
switch(x,"15-19"=1,"20-24"=1,"25-29"=2,"30-34"=2,"35-39"=3,"40-44"=3,
"45-49"=4,"50-54"=4,"55-59"=5,"60-64"=5,"ISCED 0"=6,"ISCED 1"=6,"ISCED 2"=6,"ISCED 3"=7,"ISCED 4"=7,"ISCED 5"=8,"ISCED 6"=8,0)}
그런 다음 for 루프에서 사용했습니다.
for ( i in 1:k){
x<-mydata$BRLABELS[i]
mydata$group[i]<-group_label(x)}
혼란스러운 부분은이 방법이 15 분 정도 소요되었지만 이론적으로는 switch 방법이 다중 if 문에 적합하다는 것입니다.
누군가 왜 이런 일이 발생하는지 설명하고 효율적인 대안을 제공 할 수 있습니까?
결국 제임스가 언급 한 "자동차"패키지의 레코딩 기능을 사용했습니다.
mydata$BRLABELS<-recode(mydata$BRLABELS,"c('15-19','20-24')='15-24';c('25-29','30-34')='25-34';c('35-39','40-44')='35-44'; c('45-49','50-54')='45-54';c('55-59','60-64')='55-64';c('ISCED 0','ISCED 1','ISCED 2')='ISCED 0-2';c('ISCED 3','ISCED 4')='ISCED 3-4';c('ISCED 5','ISCED 6')='ISCED 5-6'; else ='0'")
for \ if 루프보다 눈에 친숙하고 시간 차이가 큽니다. 마지막으로 plyr 패키지를 사용하여 원하는 열 (최종 목적)을 추가했습니다.
ddply(mydata,~GEO +VAR +ANSWER +LABELS +BREAKDOWN +BRLABELS ,summarise,VALUE=sum(VALUE))
도와 주셔서 감사합니다
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다