和往常一样,我得到了一些SPSS文件,我已经导入到R 2与从spss.getHmisc功能。我与labelled类困扰的是Hmisc::spss.get增加在data.frame所有变量,因此想删除它。

labelled类对当我尝试运行ggplot甚至当我想要做一些琐碎的分析,我头疼!一个解决办法是在labelled每个变量除去data.frame类。我怎样才能做到这一点?这是可能的呢?如果不是,那么我的其他选择?

我真的想绕过重新编辑变量“从零开始”与as.data.frame(lapply(x, as.numeric))as.character适用......我当然不想手动运行SPSS和移除标签(不喜欢SPSS,也没有照顾到安装) !

谢谢!

有帮助吗?

解决方案

可以避免创建 “标记的” 在spss.get与参数变量:,use.value.labels = FALSE

w <- spss.get('/tmp/my.sav', use.value.labels=FALSE, datevars=c('birthdate','deathdate'))

这查亚代码如果类标记的载体的被简单地“标记的”而不是C可能会失败(“标记的”,“因子”),在该情况下,它应该是:

class(x[[i]]) <- NULL  # no error from assignment of empty vector

在报告错误可以使用此代码再现:

> b <- 4:6
> label(b) <- 'B Label'
> str(b)
Class 'labelled'  atomic [1:3] 4 5 6
  ..- attr(*, "label")= chr "B Label"
> class(b) <- class(b)[-1]
Error in class(b) <- class(b)[-1] : 
  invalid replacement object to be a class string

其他提示

下面是我如何得到完全摆脱的标签。类似Jyotirmoy的解决方案,但作品的载体,以及一个data.frame。 (部分学分弗兰克勒尔)

clear.labels <- function(x) {
  if(is.list(x)) {
    for(i in 1 : length(x)) class(x[[i]]) <- setdiff(class(x[[i]]), 'labelled') 
    for(i in 1 : length(x)) attr(x[[i]],"label") <- NULL
  }
  else {
    class(x) <- setdiff(class(x), "labelled")
    attr(x, "label") <- NULL
  }
  return(x)
}

使用如下:

my.unlabelled.df <- clear.labels(my.labelled.df)

可以从read.spss包试用foreign功能。

有一个粗略的办法摆脱由labelled创建的spss.get

for (i in 1:ncol(x)) {
    z<-class(x[[i]])
    if (z[[1]]=='labelled'){
       class(x[[i]])<-z[-1]
       attr(x[[i]],'label')<-NULL
    }
}

但可以请您给地方labelled导致问题的例子吗?

如果我在由MAED创建的数据帧x可变spss.get,我有:

> class(x$MAED)
[1] "labelled" "factor"  
> is.factor(x$MAED)
[1] TRUE
期望一个因子(比如说)

这么好编写的代码不应该有任何问题。

好吧,我想通了,unclass功能可用于去除类(谁都会告诉,赞成?!):

library(Hmisc)
# let's presuppose that variable x is gathered through spss.get() function
# and that x is factor
> class(x)
[1] "labelled" "factor"
> foo <- unclass(x)
> class(foo)
[1] "integer"

这不是最幸运的解决方案,只需想象一下背转化载体的一群,如果还有人顶这个,我会检查它作为一个答案......

假设:

library(Hmisc)
w <- spss.get('...')

您可以通过使用除去了一个名为“VAR1”变量的标签:

attributes(w$var1)$label <- NULL

如果你也想去掉“labbled”之类的,你可以这样做:

class(w$var1) <- NULL 

或者,若变量具有一个以上的类:

class(w$var1) <- class(w$var1)[-which(class(w$var1)=="labelled")]

希望这有助于!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top