3

まず、質問がはっきりしない場合は、お詫び申し上げます。私はRにまったく慣れていないので、私の用語はそれほど良くありません。

調査データを含むSPSSファイルを外部の会社から入手します。データを抽出してCSVファイルに書き込むためのRスクリプトがあります。これは正常に機能します。

スクリプトの2番目の部分では、考えられるすべてのアワー用のINIスタイルのファイルを作成します。例として、AGEの場合、次のようになります。

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

CSVファイルには、行ごとに1、2、3、または4のいずれかが含まれます。最近まで、考えられるすべての回答には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);

私は1日半グーグルしてさまざまなアプローチを試みてきました。必要に応じてデータを抽出するperlスクリプトspssread.plを見つけましたが、何らかの理由ですべてのラベル名が大文字になっています。大文字と小文字が区別されるため、これは受け入れられません。このスクリプトを引き続き見ていきますが、それまでの間、Rを使用した解決策があるかどうかを確認したいと思います。これは、すでに使用しているものであり、すべてを1つのスクリプトにまとめるとよいからです。

それで、何か提案はありますか?

4

1 に答える 1

2

Brian Diggs のおかげで、私は別の方法を模索することができ、完璧ではありませんが、解決策を見つけることができました。

私の解決策は、でデータを抽出してから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+ "

編集: 04/05/12

Brian Diggs の助けを借りて (コメントを参照)、最終的な解決策は次のとおりです。

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);
于 2012-05-02T09:34:21.403 に答える