选择具有自定义类的列

时间:2019-05-16 10:21:41

标签: r class select filtering r-haven

问题很简单。我正在使用haven包,当将数据从Stata导入R时,它会创建一个名为haven_labelled的自定义类(具有在R中显示标签的优点)。我想选择具有此自定义类(或任何其他自定义类)的列。

使用标准类,可以使用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. 与“ haven_labelled”相对,实际上必须对类名进行“标记”。
  2. 该选择不起作用,因为避风港为每个变量都创建了双重类(除了另一个类别,它们都为labelled)。因此,基于标签的选择只会返回完整的数据集。

1 个答案:

答案 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)