如何通过 SPSS 使用 R 创建变量并传回 SPSS?

How to create variables using R through SPSS and pass back to SPSS?

我一直在尝试通过 SPSS 调用 R。

我已经弄清楚如何将 SPSS 数据拉入 R 数据帧,创建变量,并将带有新变量的数据帧传回 SPSS 数据集。

我不知道该怎么做是传回变量,这些变量是使用 R 创建的第一个变量的附加转换。

具体来说,我先创建变量

index <- c("INDX","label",0,"F8.2","scale")

通过将变量 B 从 0 缩放到 1 并使用以下代码创建数据帧 casedata

casedata <- data.frame(casedata, ave(casedata$B, casedata$Patient_Type, 
    FUN = function(x) (x- min(x))/(max(x)- min(x))))

我可以成功地将新数据帧传回 SPSS,一切正常。但是在对 R 的同一次调用中,我想创建一个新变量

indexave <- c("INDX_Ave","label",0,"F8.2","scale")

使用以下代码将 INDX 索引到自身的平均值:

casedata <- data.frame(casedata, casedata$INDX/mean(casedata$INDX))

我不知道如何将 INDX_Ave 传回 SPSS。

我怀疑这与 SPSS 为新变量分配名称的方式有关。你会注意到

ave(casedata$B, casedata$Patient_Type, FUN = function(x) (x- min(x))/(max(x) - min(x))

前面没有casedata$INDX=。 SPSS显然从这行代码知道

index <- c("INDX","label",0,"F8.2","scale")

将名称 INDX 传递给创建的第一个变量。我相信变量名称与变量本身的这种脱节正在阻止创建附加变量 INDX_Ave

下面是我的整个程序块:

BEGIN PROGRAM  R.
dict <- spssdictionary.GetDictionaryFromSPSS()
casedata <- spssdata.GetDataFromSPSS(factorMode="labels")
catdict <- spssdictionary.GetCategoricalDictionaryFromSPSS()
index <- c("INDX","Level Importance Index",0,"F8.2","scale")
indexave <- c("INDX_Ave","Level importance indexed to average importance",0,"F8.2","scale")
dict<-data.frame(dict,index,indexave) 

casedata <- data.frame(casedata, ave(casedata$B, casedata$Patient_Type, 
                                    FUN = function(x) (x- min(x))/(max(x)- min(x))))

casedata <- data.frame(casedata, casedata$INDX/mean(casedata$INDX)) #dosent work

spssdictionary.SetDictionaryToSPSS("BWOverallBetas2",dict,categoryDictionary=catdict)
spssdata.SetDataToSPSS("BWOverallBetas2",casedata,categoryDictionary=catdict)
spssdictionary.EndDataStep()
END PROGRAM.

请参阅 R 可编程性文档中的 "Writing Results to a New IBM SPSS Statistics Dataset" 部分。您传递的字典中的名称管理 SPSS 端的名称,但请注意 SPSS 和 R 中合法变量名称的规则是不同的,尽管这不是这里的问题。此外,如果 SPSS 处于过程状态,则无法创建数据集(此代码也不是问题)。

您的代码将 INDX 添加到 SPSS 词典并通过 ave 对其进行计算,但未在 casedata 数据框中分配名称 INDX。然后它添加了另一个变量,但没有将其添加到要发送到 SPSS 的字典中,因此字典和数据帧的大小不匹配。

另请注意,您可以在 GetDataFromSPSS 中省略 factorMode 参数,这样就不用理会分类词典,因为值将保持不变。

HTH