删除附带外部/ Hmisc SPSS导入功能的变量标签

aL3*_*3xa 8 import label r class spss

像往常一样,我得到了一些SPSS文件,我已经使用包中的spss.get函数导入到R中Hmisc.我被添加到所有变量中的labelled类所困扰,因此想要删除它.Hmisc::spss.getdata.frame

labelled当我尝试跑步ggplot或甚至当我想做一些卑鄙的分析时,课程让我头疼!一种解决方案是从中删除labelled每个变量的类data.frame.我怎样才能做到这一点?这有可能吗?如果没有,我的其他选择是什么?

我真的想绕过"从零开始"与重新编辑变量as.data.frame(lapply(x, as.numeric)),并as.character在适用情况下......我当然不希望运行SPSS并手动删除标签(不喜欢SPSS,也不关心安装它)!

谢谢!

Dom*_*ois 11

这是我如何完全摆脱标签.与Jyotirmoy的解决方案类似,但适用于矢量和data.frame.(Frank Harrell的部分学分)

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)
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

my.unlabelled.df <- clear.labels(my.labelled.df)
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 5

关于 R 对象中的类成员资格的迟来的注释/警告。识别“标记”的正确方法不是使用is函数或等式 { ==) 进行测试,而是使用 进行测试inherits。测试特定位置的方法不会选择现有类的顺序与假设的顺序不同的情况。

您可以使用以下参数避免在 spss.get 中创建“带标签”变量: use.value.labels=FALSE。

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

如果标记向量的类只是“标记”而不是 c(“标记”, “因子”),则 Bhattacharya 的代码可能会失败,在这种情况下,它应该是:

class(x[[i]]) <- NULL  # no error from assignment of empty vector
Run Code Online (Sandbox Code Playgroud)

您报告的错误可以使用以下代码重现:

> 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
Run Code Online (Sandbox Code Playgroud)