我在SPSS中有一个包含100K +行和100多列的数据集。我想同时将行和列过滤到新的SPSS数据集中。
我可以使用R中的subset
命令轻松完成此操作。例如:
new_data = subset(old_data, select = ColumnA >10, select = c(ColumnA, ColumnC, ColumnZZ))
更容易:
new data = old_data[old_data$ColumnA >10, c(1, 4, 89)]
我将传递列索引。
SPSS中的等价物是什么?
我喜欢R,但SPSS的读/写和数据管理速度明显更好。
答案 0 :(得分:4)
当你写“SPSS的读/写和数据管理速度明显优于R”时,我不确定你到底指的是什么。你的问题本身就证明了R在数据管理方面的灵活性!而且,100k行和100列的数据集绝不是一个大数据集。
但是,要回答你的问题,也许你正在寻找这样的事情。我正在提供一个“程序化”解决方案,而不是GUI,因为你在Stack Overflow上提出问题,其中重点更多地放在编程方面。我正在使用可在此处找到的示例数据文件:http://www.ats.ucla.edu/stat/spss/examples/chp/p004.sav
将该文件保存到SPSS工作目录,打开SPSS语法编辑器,然后键入以下内容:
GET FILE='p004.sav'.
SELECT IF (lactatio <= 3).
SAVE OUTFILE= 'mynewdatafile.sav'
/KEEP currentm previous lactatio.
GET FILE='mynewdatafile.sav'.
但更有可能的是,你必须经历这样的事情:
FILE HANDLE directoryPath /NAME='C:\path\to\working\directory\' .
FILE HANDLE myFile /NAME='directoryPath/p004.sav' .
GET FILE='myFile'.
SELECT IF (lactatio <= 3).
SAVE OUTFILE= 'directoryPath/mynewdatafile.sav'
/KEEP currentm previous lactatio.
FILE HANDLE myFile /NAME='directoryPath/mynewdatafile.sav'.
GET FILE='myFile'.
您现在应该创建一个只有三列的新文件,并且“lactatio”列中的值不大于3.
所以,基本步骤是:
使用R,基本步骤是:
嗯....我不了解你,但我知道我更喜欢哪种方法;)
如果你正在使用R的正确工具,你也可以直接读入你感兴趣的特定子集,而无需首先加载整个数据集,如果速度真的是一个问题。
答案 1 :(得分:0)
在spss中,你不能在一个命令中组合这两个动作,但是很容易将它们分成两个:
dataset copy old_data. /* delete this if you don't need to keep both old and new data.
select if ColumnA>10.
add files /file=* /keep=ColumnA ColumnC ColumnZZ.