0

这个问题非常简单。我正在使用这个haven包,它创建了一个自定义类haven_labelled,在将数据从 Stata 导入 R 时调用(它的好处是在 R 中显示标签)。我想选择具有此自定义类(或任何其他自定义类)的列。

使用标准类,可以使用is.numericis.factor

例如:df <- Filter(is.numeric, df)

可以在此处找到许多其他方法。

我试过用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. 类名实际上必须是“labelled”而不是“haven_labelled”。
  2. 选择不起作用,因为 Have 为每个变量创建了双类(并且所有这些都是labelled另一个类的补充)。因此,基于标签的选择只返回完整的数据集。
4

1 回答 1

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)
于 2019-05-16T10:35:26.160 回答