【问题标题】:How to create variables using R through SPSS and pass back to SPSS?如何通过SPSS使用R创建变量并传回SPSS?
【发布时间】:2016-12-20 13:17:24
【问题描述】:

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


    【解决方案1】:

    请参阅 R 可编程性文档中的“将结果写入新的 IBM SPSS Statistics 数据集”部分。您传递的字典中的名称控制着 SPSS 端的名称,但请注意,SPSS 和 R 中合法变量名称的规则是不同的,尽管这不是问题。此外,如果 SPSS 处于过程状态,则无法创建数据集(此代码也不是问题)。

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

    还请注意,您可以在 GetDataFromSPSS 中省略 factorMode 参数,然后不必理会分类字典,因为值将保持不变。

    HTH

    【讨论】:

    • 谢谢@JKP!似乎第二个data.frame 命令仍然给我带来了问题。出于某种原因,我认为在从 SPSS 调用 R 时必须使用data.frame 添加/计算变量,但是当我创建变量时,一切都解决了,就像我经常做的那样,例如casedata$INDX &lt;- ave(casedata$B, casedata$Patient_Type, FUN = function(x) (x- min(x))/(max(x)- min(x)))casedata$INDX_Ave &lt;- casedata$INDX/mean(casedata$INDX)
    • 要发送到统计数据的变量都必须在一个数据框中,以便调用 SetDataToSPSS,但您可以随意创建它们。在原始代码中,您没有在数据框中分配INDX名称,导致后来引用它时出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多