【发布时间】:2018-02-27 04:05:52
【问题描述】:
我有一个 CSV 文件,其中数值以如下方式存储:
+000000000000000000000001101.7100
上面的数字是 1101.71。该字符串的长度始终相同,因此实际数字之前的零个数取决于数字的长度。 如何在实际数字之前删除 + 和全 0,以便我可以轻松地将其转换为数字?
【问题讨论】:
标签: r csv char numeric string-parsing
我有一个 CSV 文件,其中数值以如下方式存储:
+000000000000000000000001101.7100
上面的数字是 1101.71。该字符串的长度始终相同,因此实际数字之前的零个数取决于数字的长度。 如何在实际数字之前删除 + 和全 0,以便我可以轻松地将其转换为数字?
【问题讨论】:
标签: r csv char numeric string-parsing
我可能会错过一个重要的点,但我最好的尝试是这样的:
1) 将值作为字符读取
2) 使用 substr 去掉第一个字符,即加号
3) 使用 as.integer / 转换列,这样我们就可以安全地松开任何前导零
【讨论】:
如果它是固定宽度,那么substring 将是一个更快的选择
as.numeric(substring(str1, nchar(str1)-8))
#[1] 1101.71
但如果我们不知道开头会有多少个 0,那么另一个选项是 sub,我们在字符串的开头 (^) 匹配一个 +,后跟 0 或更多0 (0*) 的元素并替换为空白 ("")
as.numeric(sub("^\\+0*", "", str1))
#[1] 1101.71
请注意,我们将 + 转义,因为它是暗示一个或多个的元字符
【讨论】: