修剪错误?未删除前导空格
trimws bug? leading whitespace not removed
Edit:感谢R Yoda,我终于能够创建一个可复制的我面临的问题示例:
x = rawToChar(as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32)))
trimws(x)
=> 问题:我怎样才能 trim x?
问题的旧文本:
请参阅随附的屏幕截图。不幸的是,我无法创建可重现的示例,因为 dput
正在影响结果...
有人知道如何调查 x 出了什么问题吗?前导空格似乎不是标准的!
charToRaw(x)
给出 a0 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")
相同)
一个可能的解决方案是用正确的空格替换错误编码的空格:
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))
0xa0
是在R
中编码另一种space(不间断的space),而0x20
是白色的[=27] =].
trimws
搜索白色 space 或制表符或换行符或回车符 returns(由 [ \t\r\n]+
表示)但不搜索不间断的 space,因此它确实不工作。
您可以使用 sub
(抑制前导或尾随 spaces)或 gsub
(同时抑制尾随和前导 spaces)来删除任何类型的尾随或前导space(s)(包括0xa0
代表的那个):
sub("^\s+", "", x)
[1] "11.132592"
并删除前导和尾随 spaces:
gsub("(^\s+)|(\s+$)", "", x)
Edit:感谢R Yoda,我终于能够创建一个可复制的我面临的问题示例:
x = rawToChar(as.raw(c(0xa0, 0x31, 0x31, 0x2e, 0x31, 0x33, 0x32, 0x35, 0x39, 0x32)))
trimws(x)
=> 问题:我怎样才能 trim x?
问题的旧文本:
请参阅随附的屏幕截图。不幸的是,我无法创建可重现的示例,因为 dput
正在影响结果...
有人知道如何调查 x 出了什么问题吗?前导空格似乎不是标准的!
charToRaw(x)
给出 a0 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")
相同)
一个可能的解决方案是用正确的空格替换错误编码的空格:
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))
0xa0
是在R
中编码另一种space(不间断的space),而0x20
是白色的[=27] =].
trimws
搜索白色 space 或制表符或换行符或回车符 returns(由 [ \t\r\n]+
表示)但不搜索不间断的 space,因此它确实不工作。
您可以使用 sub
(抑制前导或尾随 spaces)或 gsub
(同时抑制尾随和前导 spaces)来删除任何类型的尾随或前导space(s)(包括0xa0
代表的那个):
sub("^\s+", "", x)
[1] "11.132592"
并删除前导和尾随 spaces:
gsub("(^\s+)|(\s+$)", "", x)