问题很简单。我正在使用haven
包,当将数据从Stata导入R时,它会创建一个名为haven_labelled
的自定义类(具有在R中显示标签的优点)。我想选择具有此自定义类(或任何其他自定义类)的列。
使用标准类,可以使用is.numeric
,is.factor
等。
例如:df <- Filter(is.numeric, df)
。
here可以找到许多其他方法。
我尝试用class=="haven_labelled"
代替这些示例。
例如:df <- Filter(class=="haven_labelled", df)
,
但这不起作用。它给出了错误:
Error in class == "haven_labelled" :
comparison (1) is possible only for atomic and list types
有什么想法吗?
编辑:
在尝试H 1的解决方案时,我发现了两件事,这对于使用Haven软件包的其他人可能很重要。
labelled
)。因此,基于标签的选择只会返回完整的数据集。答案 0 :(得分:1)
您可以创建一个简单的函数来测试某些东西是否属于“ haven_labelled”类,然后使用它来对数据进行子集化。例如:
is.haven <- function(x) "haven_labelled" %in% class(x)
Filter(is.haven, df)
或
df[sapply(df, is.haven)]
或
dplyr::select_if(df, is.haven)