问题描述
我希望在众多系统生成的表上执行数据质量。其中一项检查是查看字符列中的所有值是否仅为数字。我想知道此检查为真的数字列。以下表为例,我想确定两列(代码和年龄)是仅包含数值的字符列。
表格结构
表格值
我在思考执行此操作所需的逻辑时遇到问题。到目前为止,我所做的是:
仅选择字符数据类型的列
df %>%
dplyr::select_if(is.character)
验证列中的所有值都是数字(或 null,这很好)
sum(varhandle::check.numeric(df$code)) == nrow(df)
我希望构建一个跨所有列执行此操作的函数,并将检查为真的数字存储到列中(即 dplyr::mutate),但我不确定如何构造它;是交叉,申请还是其他什么。或者是否有任何现有的功能/包可以执行此任务?任何帮助表示赞赏。
解决方法
我们可以在 select
自身内部构造条件
library(dplyr)
iris %>%
select(where(~ all(varhandle::check.numeric(.))))
不清楚是否 numeric
列具有不匹配的类型或具有某些字符元素的列因此被转换为 class
character
。如果是前者,则在type.convert
前加一个select
,然后只获取数字列
df %>%
type.convert(as.is = TRUE) %>%
select(where(is.numeric))