我正在R中工作,但我需要以SPSS格式同时包含“变量标签”和“值标签”来提供一些数据,我有点受阻。

我已经使用Hmisclabel函数将变量标签添加到了我的数据中。这会将变量标签添加为label attribute,这在使用describe()包中的Hmisc时非常方便。问题是我无法从write.foreign()包中获取foreign函数,以将这些标签识别为变量标签。我想我在编写write.foreign()文件时需要修改label attribute以将variable label用作.sps

我查看了R列表和stackoverflow,但是我只能找到a post from 2006 on the R list regarding exporting varibles labels to SPSS from R,它似乎无法回答我的问题。

这是我的工作示例,

# First I create a dummy dataset
df <- data.frame(id = c(1:6), p.code = c(1, 5, 4, NA, 0, 5),
                 p.label = c('Optometrists', 'Nurses', 'Financial analysts',
                 '<NA>', '0', 'Nurses'), foo = LETTERS[1:6])

# Second, I add some variable labels using label from the Hmisc package
# install.packages('Hmisc', dependencies = TRUE)
library(Hmisc)
label(df) <- "Sweet sweet data"
label(df$id) <- "id !@#$%^"
label(df$p.label) <- "Profession with human readable information"
label(df$p.code) <- "Profession code"
label(df$foo) <- "Variable label for variable x.var"
# modify the name of one varibes, just to see what happens when exported.
names(df)[4] <- "New crazy name for 'foo'"

# Third I export the data with write.foreign from the foreign package
# install.packages('foreign', dependencies = TRUE)
setwd('C:\\temp')
library(foreign)
write.foreign(df,"df.wf.txt","df.wf.sps",  package="SPSS")

list.files()
[1] "df.wf.sps" "df.wf.txt"

当我检查.sps文件(请参见下面的'df.wf.sps'的内容)时,我的variable labelsvariable names相同,除了foo外,我将其重命名为“'foo'的新疯狂名称”。此变量具有一个新的似乎随机的名称,但正确的variable label.
有谁知道如何将标签属性和变量名称作为“变量标签”和“标签名称”导出到.sps文件中?也许比我目前的方法更聪明的方式来存储“变量标签”?

任何帮助将不胜感激。

谢谢,埃里克

使用write.foreign包中的foreign导出“df.wf.sps”的内容
DATA LIST FILE= "df.wf.txt"  free (",")
/ id p.code p.label Nwcnf.f.  .

VARIABLE LABELS
 id "id"
 p.code "p.code"
 p.label "p.label"
 Nwcnf.f. "New crazy name for 'foo'"
 .

VALUE LABELS
/
p.label
 1 "0"
 2 "Financial analysts"
 3 "Nurses"
 4 "Optometrists"
/
Nwcnf.f.
 1 "A"
 2 "B"
 3 "C"
 4 "D"
 5 "E"
 6 "F"
.

EXECUTE.

PDT更新2012年4月16日15:54:24;

我正在寻找一种调整write.foreign的方法,以编写.sps文件,其中,
[…]

VARIABLE LABELS
 id "id"
 p.code "p.code"
 p.label "p.label"
 Nwcnf.f. "New crazy name for 'foo'"

[…]

看起来像这样
[…]

VARIABLE LABELS
 id "id !@#$%^"
 p.code "Profession code"
 p.label "Profession with human readable information"
 "New crazy name for 'foo'" "New crazy name for 'foo'"

[…]

最后一行有点雄心勃勃,我确实不需要名称中带有空格的变量,但我希望将标签属性转移到.spas文件(由R生成)中。

最佳答案

尝试使用此功能,看看它是否对您有用。如果没有,请添加评论,然后我就可以进行故障排除。

# Step 1: Make a backup of your data, just in case
df.orig = df
# Step 2: Load the following function
get.var.labels = function(data) {
  a = do.call(llist, data)
  tempout = vector("list", length(a))

  for (i in 1:length(a)) {
    tempout[[i]] = label(a[[i]])
  }
  b = unlist(tempout)
  structure(c(b), .Names = names(data))
}
# Step 3: Apply the variable.label attributes
attributes(df)$variable.labels = get.var.labels(df)
# Step 4: Load the write.SPSS function available from
# https://stat.ethz.ch/pipermail/r-help/2006-January/085941.html
# Step 5: Write your SPSS datafile and codefile
write.SPSS(df, "df.sav", "df.sps")

上面的示例假设您的数据名为df,并且已使用Hmisc添加标签,如您在问题中所述。

更新:一个自包含的功能

如果您不想更改原始文件(如上例所示),并且在使用此功能时已连接到Internet,则可以尝试以下独立功能:
write.Hmisc.SPSS = function(data, datafile, codefile) {
  a = do.call(llist, data)
  tempout = vector("list", length(a))

  for (i in 1:length(a)) {
    tempout[[i]] = label(a[[i]])
  }
  b = unlist(tempout)
  label.temp = structure(c(b), .Names = names(data))
  attributes(data)$variable.labels = label.temp
  source("http://dl.dropbox.com/u/2556524/R%20Functions/writeSPSS.R")
  write.SPSS(data, datafile, codefile)
}

用法很简单:
write.Hmisc.SPSS(df, "df.sav", "df.sps")

关于r - R中的 `label attribute`到SPSS中的 `VARIABLE LABELS`的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10181730/

10-11 21:43