数据质量 - 检查字符列中的所有值是否都是 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))
我希望在众多系统生成的 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))