Class 删除附加有外部/Hmisc SPSS导入功能的变量标签
像往常一样,我得到了一些SPSS文件,我用Class 删除附加有外部/Hmisc SPSS导入功能的变量标签,class,r,import,label,spss,Class,R,Import,Label,Spss,像往常一样,我得到了一些SPSS文件,我用SPSS导入到R中。从Hmisc包中获取函数。我对标记的类感到烦恼,该类Hmisc::spss.get将添加到data.frame中的所有变量,因此希望删除它 当我试图运行ggplot或者甚至当我想做一些低级的分析时,labeled类会让我头疼!一种解决方案是从data.frame中的每个变量中删除标记的类。我该怎么做?那有可能吗?如果没有,我的其他选择是什么 我真的想用as.data.frame(lappy(x,as.numeric))和as.char
SPSS导入到R中。从Hmisc
包中获取函数。我对标记的类感到烦恼,该类Hmisc::spss.get
将添加到data.frame
中的所有变量,因此希望删除它
当我试图运行ggplot
或者甚至当我想做一些低级的分析时,labeled
类会让我头疼!一种解决方案是从data.frame
中的每个变量中删除标记的类。我该怎么做?那有可能吗?如果没有,我的其他选择是什么
我真的想用as.data.frame(lappy(x,as.numeric))
和as.character
跳过“从头开始”重新编辑变量的过程。。。我当然不想运行SPSS并手动删除标签(不喜欢SPSS,也不想安装它)
谢谢 您可以从foreign
软件包中试用read.spss
函数
这是一种摆脱由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
}
}
因此,期望某个因子(比如)的编写良好的代码应该不会有任何问题。好吧,我发现unclass
函数可以用来删除类(谁会说,是的?!):
库(Hmisc)
#让我们假设变量x是通过spss.get()函数收集的
#这个x是因子
>类别(x)
[1] 标记为“因子”
>foo类(foo)
[1] “整数”
这不是最幸运的解决方案,想象一下把一堆向量转换回来。。。如果有人超过了这一点,我将检查它作为一个答案…您可以避免在spss中创建“标记”变量。使用参数:get,使用.value.labels=FALSE
w <- spss.get('/tmp/my.sav', use.value.labels=FALSE, datevars=c('birthdate','deathdate'))
w类(b)假设:
library(Hmisc)
w <- spss.get('...')
库(Hmisc)
下面是我如何彻底摆脱标签的。类似于Jyotirmoy的解决方案,但适用于向量和data.frame。(部分归功于弗兰克·哈雷尔)
clear.labels实际上,这种方法并没有删除labeled
类。这里有一个错误:类中的错误(x[[i]])它与我尝试的SPSS文件一起工作。你能链接到一个失败的示例文件吗?或者给出for(i in 1:ncol(x))print(class(x[[i]])的输出,其中x是导入的数据帧。是否尝试sappy(x,class)
而不是使用循环?哦,不幸的是,我记不起我使用的是哪个数据文件。。。那是很久以前的事了……一个重要的例子是一个c(“标记的”,“因子”)类对象,我已经运行了你的代码,它对我很有用。但我也有一个问题。当使用类为tbl_df
、tbl
和data.frame
的data.frame
时,函数is.list
显示TRUE
的输出。你明白为什么输出会显示这一点吗?data.frame
是一个列表,即使它的类不是显式的“list”。试试is(data.frame())
,还有is(tibble::tibble())
;我们可以说df和tibble都是“受限”列表。它们通常是矩形的(例外是df可以包含一个矩阵,这很奇怪),如果您查看data.frame
的源代码,就会发现它是由列表组成的(例如return(结构(list(),name=character(),row.names=row.names,class=“data.frame”)
)
w <- spss.get('/tmp/my.sav', use.value.labels=FALSE, datevars=c('birthdate','deathdate'))
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
library(Hmisc)
w <- spss.get('...')
attributes(w$var1)$label <- NULL
class(w$var1) <- NULL
class(w$var1) <- class(w$var1)[-which(class(w$var1)=="labelled")]
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)
clear.labels <- function(x) {
if(is.list(x)) {
for(i in seq_along(x)) {
class(x[[i]]) <- setdiff(class(x[[i]]), 'labelled')
attr(x[[i]],"label") <- NULL
}
} else {
class(x) <- setdiff(class(x), "labelled")
attr(x, "label") <- NULL
}
return(x)
}