Select 个具有自定义 class 的列
Select columns with a custom class
这个问题很简单。我正在使用 haven
包,它在将数据从 Stata 导入 R 时创建了一个名为 haven_labelled
的自定义 class(这有利于在 R 中显示标签)。我想要 select 具有此自定义 class(或任何其他自定义 class)的列。
对于标准 classes,人们会使用 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 包的其他人来说可能很重要的事情。
- class 名称实际上必须是 "labelled" 而不是 "haven_labelled"。
- 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)
这个问题很简单。我正在使用 haven
包,它在将数据从 Stata 导入 R 时创建了一个名为 haven_labelled
的自定义 class(这有利于在 R 中显示标签)。我想要 select 具有此自定义 class(或任何其他自定义 class)的列。
对于标准 classes,人们会使用 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 包的其他人来说可能很重要的事情。
- class 名称实际上必须是 "labelled" 而不是 "haven_labelled"。
- 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)