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

Data quality - check if all values in a character column are numbers in R

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

Table结构

Column Name Data Type
name character
type character
code character
member_id integer
collection_date date
age character
height double

Table 值

Column Name Column Values
name only letters
type only letters
code only numbers
member_id only numbers
collection_date only dates
age only numbers
height only numbers

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

至select仅字符数据类型的列

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

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

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

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

我们可以在 select 本身

中构建条件
library(dplyr)
iris %>%
   select(where(~ all(varhandle::check.numeric(.)))) 

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

df %>%
   type.convert(as.is = TRUE) %>%
   select(where(is.numeric))