1

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

表结构

列名 数据类型
姓名 特点
类型 特点
代码 特点
会员ID 整数
采集日期 日期
年龄 特点
高度 双倍的

表值

列名 列值
姓名 只有字母
类型 只有字母
代码 只有数字
会员ID 只有数字
采集日期 只有日期
年龄 只有数字
高度 只有数字

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

仅选择字符数据类型的列

df %>%
  dplyr::select_if(is.character)

验证列中的所有值都是数字(或 null,这很好)

sum(varhandle::check.numeric(df$code)) == nrow(df)

我希望构建一个在所有列中执行此操作的函数,并将检查为真的数字存储到列中(即 dplyr::mutate),但我不确定如何构造它;它是交叉,应用还是其他东西。或者是否有任何现有的功能/包可以执行此任务?任何帮助表示赞赏。

4

1 回答 1

2

select我们可以在自身内部构建条件

library(dplyr)
iris %>%
   select(where(~ all(varhandle::check.numeric(.)))) 

目前尚不清楚numeric类型不匹配的列或具有某些字符元素的列是否被转换为class character. 如果是前者,则type.convert在 the 之前添加一个select,然后只获取数字列

df %>%
   type.convert(as.is = TRUE) %>%
   select(where(is.numeric))
于 2021-03-31T17:00:01.270 回答