Select 个具有自定义 class 的列

Select columns with a custom class

这个问题很简单。我正在使用 haven 包,它在将数据从 Stata 导入 R 时创建了一个名为 haven_labelled 的自定义 class(这有利于在 R 中显示标签)。我想要 select 具有此自定义 class(或任何其他自定义 class)的列。

对于标准 classes,人们会使用 is.numericis.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 包的其他人来说可能很重要的事情。

  1. class 名称实际上必须是 "labelled" 而不是 "haven_labelled"。
  2. selection 不起作用,因为 haven 为每个变量创建了双 classes(除了另一个 class 之外,它们都是 labelled)。因此 selection 基于仅标记 returns 的完整数据集。

您可以创建一个简单的函数来测试某些内容是否属于 class "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)