如何通过 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
我一直在尝试通过 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