首先,如果我不清楚我的问题,我想在旁边道歉。我对R完全是新手,我的术语也不会那么好。
我们从包含调查数据的外部公司获取SPSS文件。我们有一个R脚本来提取数据并将其写入CSV文件。这很好。
脚本的第二部分为所有可能的aswers构建一个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);
我花了一天半的谷歌搜索并尝试各种方法。我确实找到了一个perl脚本spssread.pl,它可以根据需要提取数据,但由于某些原因,所有标签名称都是大写的,这是不可接受的,因为它们区分大小写。我将继续关注这个脚本,但与此同时我想看看是否有使用R的解决方案,因为这是我们已经使用过的,将一切都放在一个脚本中会很好。
那么,有什么建议吗?
答案 0 :(得分: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);