【问题标题】:Column can only be numerical or alphanumerical values R列只能是数字或字母数字值 R
【发布时间】:2020-03-31 17:46:12
【问题描述】:

列只能是数字或字母数字值(即首字母缩写词后跟数字)。但是,其中一些列包含不应该存在的符号和日期。我想要所需的输出,其中所有不是字母数字或数字的值都被标记为“1”。

1234           0
ABC1234        0
#              1
12/13/17       1
$              1
ABC            1

我正在寻找不特定于上述 ex 数据的代码,而是泛化到适用于多个列的代码。

已编辑:澄清

【问题讨论】:

    标签: r numeric alphanumeric


    【解决方案1】:

    我们可以使用grepl 创建一个可以强制转换为二进制的逻辑输出

    +(grepl("[^[:alnum:]]", v1))
    #[1] 0 0 1 1 1
    

    如果需要是字母后跟数字

    +(!grepl("^[A-Za-z]*\\d+$", v1))
    #[1] 0 0 1 1 1
    

    如果这是检查每一列

    df1[] <- lapply(df1, function(x) +(grepl("[^[:alnum:]]", x)))
    

    如果打算在列中查找不是字母数字的 any

    v2 <-  sapply(df1, function(x) any(grepl("[^[:alnum:]]", x)))
    

    数据

    v1 <- c(1234, "ABC1234", "#", "12/13/17", "$")
    

    【讨论】:

    • 仅按字母顺序排列的值也是错误的。它们需要是一个首字母缩写词,后跟一个数字或只是一个数字。将进行编辑以进一步澄清。
    • v1
    • @purple_plop 我认为你没有正确使用我的代码+(!grepl("^[A-Za-z]*\\d+$", v1))# [1] 0 0 1 1 1 1
    • 我有另一种情况,我以这种方式格式化数字:7.13E + 12 因此:v1
    • 不是[1] 0 0 1 1 1 1 0 0 因为ABC1234 应该是0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多