【问题标题】:Select columns with a custom class选择具有自定义类的列
【发布时间】:2019-05-16 10:21:41
【问题描述】:

这个问题很简单。我正在使用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. 类名实际上必须是“labelled”而不是“haven_labelled”。
  2. 选择不起作用,因为have为每个变量创建了双重类(除了另一个类之外,它们都是labelled)。因此,基于标签的选择只会返回完整的数据集。

【问题讨论】:

    标签: r class select filtering r-haven


    【解决方案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)
    

    【讨论】:

    • 非常感谢您的明确回复和多种解决方案。在尝试您的解决方案时,我发现了两件对于使用 haven 包的其他人来说可能很重要的事情。 1. 类名实际上必须是"labelled",而不是“haven_labelled”。 2.选择不起作用,因为have为每个变量创建了双重类(除了另一个类之外,它们都是labelled)。因此,基于labelled 的选择只会返回完整的数据集。
    • 这个解决方案对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多