修剪虫子?领先的空白没有删除

时间:2017-07-12 07:01:56

标签: r trim

编辑 :感谢 R Yoda ,我终于能够为我面临的问题创建一个可重现的示例:

x = rawToChar(as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32)))
trimws(x)

=>问题:如何修剪x?

问题的旧文:
请参阅附件截图。遗憾的是,我无法创建可重现的示例,因为dput正在影响结果......

任何人都知道如何调查x出了什么问题?领先的空白似乎不是标准空格!

enter image description here

charToRaw(x)给出a 31 31 31 2e 31 33 32 35 39 32
dput(charToRaw(x))给出as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32))
Encoding(x)提供"unknown"(与Encoding(" 11.132592")相同)

2 个答案:

答案 0 :(得分:7)

0xa0正在编码R中的另一种类型的空间(不间断空格),而0x20是空格。
trimws会搜索空格或制表符或换行符或回车符(由[ \t\r\n]+表示),但不会搜索非中断空格,因此无法使用。
您可以使用sub(以抑制前导或尾随空格)或gsub(以抑制尾随和前导空格)来删除任何类型的尾随或前导空格(包括由0xa0):

sub("^\\s+", "", x)
[1] "11.132592"

用于删除前导和尾随空格:

gsub("(^\\s+)|(\\s+$)", "", x)

答案 1 :(得分:3)

一种可能的解决方案是用正确的空格替换错误编码的空格:

trimws(rawToChar(replace(x1, x1 == as.raw(0xa0), as.raw(0x20))))

给出:

[1] "11.132592"

要转换为数字,只需将上面的代码包裹在as.numeric

使用过的数据:

x1 <- as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32))