数据质量 - 检查字符列中的所有值是否都是 R 中的数字

问题描述

我希望在众多系统生成的表上执行数据质量。其中一项检查是查看字符列中的所有值是否仅为数字。我想知道此检查为真的数字列。以下表为例,我想确定两列(代码和年龄)是仅包含数值的字符列。

表格结构

列名 数据类型
名称 字符
类型 字符
代码 字符
member_id 整数
收藏日期 日期
年龄 字符
高度 双重

表格值

列名 列值
名称 只有字母
类型 只有字母
代码 只有数字
member_id 只有数字
收藏日期 仅日期
年龄 只有数字
高度 只有数字

我在思考执行此操作所需的逻辑时遇到问题。到目前为止,我所做的是:

仅选择字符数据类型的列

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