【发布时间】:2017-12-01 19:05:44
【问题描述】:
我有一个名为 Site(300,000 行,100 列)的大型数据表。整个数据表都是十六进制值,例如:“\x96”或“\xc9”。我希望删除所有这些值。它们遵循“\x”后跟两个字符(数字或字母)的格式。
这是替换值的函数。我可以按如下所示单独执行每个操作,但我想要一个通用命令来删除表中的所有十六进制值。
Site<- as.data.table(apply(Site, 2, function(x) gsub("\x8e", "", x)))
我尝试使用正则表达式语法“\x..”,但收到此错误:
Error: '\x' used without hex digits in character string starting ""\x"
如何删除这些十六进制值?非常感谢任何帮助!
这是一个可重现的例子:
dt <- data.table(A = c("Th\xa1is","is","the","first\x12"), B = c("This","\x45is","the","second"))
我想删除“\xa1”、“\x12”和“\x45”,所以表格看起来像:
A B
1: This This
2: is is
3: the the
4: first second
【问题讨论】:
-
你能举一个可重现的例子吗?
apply几乎总是一个坏主意。你描述的正则表达式是"\\x[a-ZA-Z0-9]{2}",我想。 -
@Frank
a-z不是a-Z。可能只是一个错字。 -
@Frank 与拼写错误有关,该命令不会删除字符。我还添加了一个示例。
-
您的要求对我来说是非常难以理解的。为什么要删除
"\x45",即字母"E"?我猜您想删除不在"\x20"和"\x7e"之间的任何内容,即拉丁字母和一些其他特殊字符。那会给dt[, lapply(.SD, gsub, pattern = "[^\x20-\x7e]", replacement = "")] -
@Frank 当然。虽然我自己对这个主题并不完全清楚。
标签: r regex data.table