2012-04-30 2 views
3

첫째로 나는 나의 질문에서 아주 명확하지 않을 경우에 adavnce에서 사과하고 싶으면. 나는 완전히 새로운 R이고 내 용어는 그렇게 좋지 않을 것이다.요인에서 부호를 추출하는 방법

설문 조사 데이터가 포함 된 외부 회사로부터 SPSS 파일을받습니다. 데이터를 추출하여 CSV 파일에 기록하는 R 스크립트가 있습니다. 이것은 잘 작동합니다.

스크립트의 두 번째 부분은 모든 가능한 코드에 대해 INI 스타일 파일을 작성합니다. 예를 들어, 나이에 우리는 CSV 파일은 각 라인에 대한 1 일, 2, 3 또는 4가됩니다

[ AGE ] 
1 = Under 13 
2 = 13 - 15 
3 = 15 - 25 
4 = 25+ 

같은 것을 할 것입니다. 최근까지 가능한 모든 답은 1 번부터 번호가되었지만, 지금은 그들 중 일부는 따라서 우리는 같은 것을하고 싶은 0에서 시작 :

[ AGE ] 
0 = Under 13 
1 = 13 - 15 
2 = 15 - 25 
3 = 25+ 

다음은 우리가 사용하는 현재의 R 코드입니다. 어디서 잘못되는지 알지만, 어떻게 해결해야할지 모르겠다.

data<-read.spss(inputFile, to.data.frame=TRUE); 
fileOut<- file(valuesExportFile, "w"); 
for (name in names(data)) { 
    cat("[", name,"]\n", file=fileOut); 
    variableValues<-levels(data[[name]]); 
    numberOfValues<-nlevels(data[[name]]); 
    if (numberOfValues > 0) { 
    for (i in 1:numberOfValues) { 
     cat(i, '= "', variableValues[i], '"', "\n", file=fileOut); 
    } 
    } 
}; 
close(fileOut); 

저는 하루 반에 인터넷 검색을하고 다양한 접근 방식을 시도했습니다. 필자는 원하는대로 데이터를 추출하는 perl 스크립트 인 spssread.pl을 찾았습니다. 그러나 어떤 이유로 모든 레이블 이름은 대문자로되어 있으므로 대/소문자가 구분되므로 허용되지 않습니다. 나는이 스크립트를 계속 살펴볼 것이다. 그러나 그 동안에는 R을 사용하는 솔루션이 있는지 알고 싶다. 왜냐하면 이것이 우리가 이미 사용하고있는 것이므로 하나의 스크립트로 모든 것을 가지는 것이 좋을 것이기 때문이다.

그래서 어떤 제안이 필요합니까?

+1

그냥 생각 :'cat (i-1, ...)'? – joran

+1

... 어디서 어떻게 잘못됩니까? @joran이 제안했거나 다른 문제가있는 것은 단지'-1'입니까? – Tommy

+0

일부는 1로 시작하고 일부는 0으로 시작하기 때문에'cat (i-1, ...) '을 사용할 수 없습니다. PSPP로 데이터 파일을 열고 변수보기 탭을 보면 값이 올바르게 정렬되어 있는지 확인합니다. 일부는 0으로 시작하고 일부는 1로 시작합니다. 따라서 SPSS 파일에서 해당 정보를 추출하는 방법이 있어야합니다. – giuliot

답변

2

브라이언 디그 덕분에 나는 다른 방법을 시도 할 수 있었고 완벽한 해결책은 아니지만 해결책을 찾을 수있었습니다.

내 해결 방법은 use.value.labels=FALSE으로 데이터를 추출한 다음 변수의 클래스를 해제하고 value.labels 특성을 사용하는 것입니다. 나는 코드를 보여주는 것이 그것을 설명하려고 노력하는 것보다 분명 할 것이라고 생각한다.

data<-read.spss(inputFile, to.data.frame=TRUE, use.value.labels=FALSE); 
fileOut<- file(valuesExportFile, "w"); 
for (name in names(data)) { 
    cat("[", name,"]\n", file=fileOut); 
    variables<-attr(unclass(data[[name]]), "value.labels"); 
    for (label in names(variables)) { 
     cat(variables[[label]], '= "', label, '"', "\n", file=fileOut); 
    } 
}; 
close(fileOut); 

결과

[ AGE ] 
8 = " 65+ " 
7 = " 55 to 64 " 
6 = " 45 to 54 " 
5 = " 35 to 44 " 
4 = " 25 to 34 " 
3 = " 21 to 24 " 
2 = " 16 to 20 " 
1 = " 13 to 15 " 
0 = " Under 13 " 

가 실행할 수 있지만, 이상적이지 않다. 사람이 너무

[ AGE ] 
0 = " Under 13 " 
1 = " 13 to 15 " 
2 = " 16 to 20 " 
3 = " 21 to 24 " 
4 = " 25 to 34 " 
5 = " 35 to 44 " 
6 = " 45 to 54 " 
7 = " 55 to 64 " 
8 = " 65+ " 

EDIT 가지고 내가 그들을 정렬 할 수있는 방법을 알고 있나요 : 브라이언 열심히 잖아요에서 좀 더 도움이 후 04/05/12

를 최종 솔루션

data<-read.spss(inputFile, to.data.frame=TRUE, use.value.labels=FALSE); 
fileOut<- file(valuesExportFile, "w"); 
for (name in names(data)) { 
    cat("[", name,"]\n", file=fileOut); 
    variables<-attr(unclass(data[[name]]), "value.labels"); 
    variables<-variables[order(as.numeric(variables))]; 
    for (label in names(variables)) { 
     cat(variables[[label]], '= "', label, '"', "\n", file=fileOut); 
    } 
}; 
close(fileOut); 
입니다 (주석 참조)
+1

아마도'for' 루프 앞에'variables <- sort (variables)'를 추가할까요? 테스트되지 않았습니다. 아이디어는'변수'를 올바른 순서로 가져 오는 것입니다. 그래서 당신이 그것을 반복 할 때, 당신이 원하는 순서로 인쇄됩니다. –

+0

브라이언 감사합니다. 10 개 미만의 요소가 있으면 잘 작동합니다. 순서가 수치로 이루어지지 않았기 때문에 "10"은 "2"앞에옵니다. – giuliot

+0

그래, 그것은 수치 적으로는 아니고 어휘 적으로 정렬되어있다. 'variables <- variables [order (as.numeric (variables))]'문자열 버전이 아닌'variables'의 숫자 버전에서 정렬 순서를 얻습니다. –

관련 문제