【问题标题】:Data quality - check if all values in a character column are numbers in R数据质量 - 检查字符列中的所有值是否都是 R 中的数字
【发布时间】:2021-06-27 17:15:59
【问题描述】:

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

表结构

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

表格值

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

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

仅选择字符数据类型的列

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

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

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

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

【问题讨论】:

    标签: r data-quality


    【解决方案1】:

    我们可以在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))
    

    【讨论】:

    • 谢谢你,这是完美的,非常简单,非常感谢!
    猜你喜欢
    • 2014-04-09
    • 2019-05-13
    • 2021-12-27
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2014-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多