【问题标题】:R - how to drop chars from string depending on their values?R - 如何根据它们的值从字符串中删除字符?
【发布时间】:2018-02-27 04:05:52
【问题描述】:

我有一个 CSV 文件,其中数值以如下方式存储:

+000000000000000000000001101.7100

上面的数字是 1101.71。该字符串的长度始终相同,因此实际数字之前的零个数取决于数字的长度。 如何在实际数字之前删除 + 和全 0,以便我可以轻松地将其转换为数字?

【问题讨论】:

    标签: r csv char numeric string-parsing


    【解决方案1】:

    我可能会错过一个重要的点,但我最好的尝试是这样的:

    1) 将值作为字符读取

    2) 使用 substr 去掉第一个字符,即加号

    3) 使用 as.integer / 转换列,这样我们就可以安全地松开任何前导零

    【讨论】:

    • 我最后使用了类似的解决方案,更准确地说是 gsub 和 as.numeric 的组合。
    【解决方案2】:

    如果它是固定宽度,那么substring 将是一个更快的选择

    as.numeric(substring(str1, nchar(str1)-8))
    #[1] 1101.71
    

    但如果我们不知道开头会有多少个 0,那么另一个选项是 sub,我们在字符串的开头 (^) 匹配一个 +,后跟 0 或更多0 (0*) 的元素并替换为空白 ("")

    as.numeric(sub("^\\+0*", "", str1))
    #[1] 1101.71
    

    请注意,我们将 + 转义,因为它是暗示一个或多个的元字符

    【讨论】:

    • 我知道这种方法,但是数字较短时会在开头保留一些0。
    • @PrzeM 用另一种方法更新
    • 谢谢,但另一个回复似乎有点简单,所以改用它。
    • @PrzeM 描述的不是一样的吗?
    • 你说得对,我可能没有注意到包含的 as.numeric 函数,尽管我需要另一行代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多