从`中的R标签attribute`到`在SPSS VARIABLE LABELS`信息(inform

2019-06-23 17:07发布

我在R工作,但我需要与两个“变量标签”和“值标签”带来的SPSS格式的一些数据,我有点卡住了。

我已经添加变量标签使用我的数据Hmisclabel功能。 这个附加变量标签作为label attribute ,使用时这是很方便describe()Hmisc包。 问题是,我不能让write.foreign()函数,从foreign包,认识到这些标签作为变量标签。 我想我需要修改write.foreign()使用label attribute作为variable label写入时.sps文件。

我看着将R名单,并在计算器,但我只能找到从2006年就出口将R名单后来自R可变因素标签SPSS ,它似乎并没有回答我的问题。

这是我工作的例子,

# 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 labels等同于我的variable names ,除了富,我重命名为“为‘富’新疯狂的名字。” 这个变量有一个新的和得体随机名称,但正确的variable label.

有谁知道如何获取标签的属性并导出为“变量标签”和“标签名称”到一个变量名.sps文件? 也许有存储“变量标签”,那么我目前的方法更聪明的方式?

任何帮助将不胜感激。

谢谢,埃里克

的“df.wf.sps”出口使用内容write.foreignforeign包装

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.

更新2012年4月16日15时54分24秒PDT;

我所寻找的是调整的方式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)。

Answer 1:

试试这个功能,看看它是否适合你。 如果没有,添加评论,我可以看看我能尽可能的故障排除去这样做。

# 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添加标签,当你在你的问题描述。

更新:一个自包含的功能

如果你不想改变你的原始文件,如上面的例子,如果你的,而你正在使用此功能连接到互联网,你可以试试这个自包含的功能:

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")


Answer 2:

你链接到功能( 在这里 )应该工作,但我认为问题是,你的数据集实际上并不具备variable.labellabel.table将有必要写SPSS脚本文件的属性。

我没有访问SPSS,但尝试以下,看看它是否至少指向你在正确的方向。 不幸的是,我没有看到一个简单的方法不是编辑的输出要做到这一点其他dput手动。

df = structure(list(id = 1:6, 
               p.code = c(1, 5, 4, NA, 0, 5), 
               p.label = structure(c(5L, 4L, 2L, 3L, 1L, 4L), 
                                   .Label = c("0", "Financial analysts",
                                              "<NA>", "Nurses", 
                                              "Optometrists"), 
                                   class = "factor"), 
               foo = structure(1:6, 
                               .Label = c("A", "B", "C", "D", "E", "F"), 
                               class = "factor")), 
               .Names = c("id", "p.code", "p.label", "foo"),
          label.table = structure(list(id = NULL,
                             p.code = NULL,
                             p.label = structure(c("1", "2", "3", "4", "5"),
                                      .Names = c("0", "Financial analysts", 
                                                 "<NA>", "Nurses", 
                                                 "Optometrists")),
                             foo = structure(1:6, 
                                  .Names = c("A", "B", "C", "D", "E", "F"))),
                             .Names = c("id", "p.code", "p.label", "foo")),
          variable.labels = structure(c("id !@#$%^",  "Profession code", 
                                 "Profession with human readable information",
                                 "New crazy name for 'foo'"), 
                            .Names = c("id", "p.code", "p.label", "foo")), 
          codepage = 65001L)

比较上面的输出dput为您的样品数据集。 注意, label.tablevariable.labels已被添加,和线,所述类似row.names = c(NA, -6L), class = "data.frame"除去。

更新

注意:这将不使用默认工作write.foreign在R.功能要测试这一点,你首先需要加载write.SPSS共享功能在这里 ,和(当然),请确保您有foreign包加载。 然后,你写你的文件内容如下:

write.SPSS(df, datafile="df.sav", codefile="df.sps")


文章来源: information from `label attribute` in R to `VARIABLE LABELS` in SPSS