检测 data.frame 中所有字符字段中的奇怪字符

Detect weird characters in all character fields in a data.frame

我有一个大的 data.frame d 是使用 read 从 .csv 文件中读取的(它实际上是一个 data.table 来自 fread .csv 文件).我想检查 weird/corrupted 个字符的每一列字符类型。意思是由于文本文件的其他损坏部分或使用错误的编码而导致的奇怪字符序列。

data.table 解决方案或其他一些快速解决方案是最好的。

这是一个可能的解决方案的伪代码

  1. d
  2. 的所有字符列的名称创建一个向量 str_cols
  3. 对于 str_cols 中的每一列 j 计算值的频率 table:tab <-d[,.N,j]。 (此步骤可能不是必需的,只是用于减少将在重复列中检查的对象的尺寸)
  4. 检查摘要中 j 的值 table tab

关键的一步是3。有没有这样的函数?

Edit1:也许是一些智能正则表达式? 非 R 问题,试图明确列出所有奇怪的字符。另一种解决方案可能是在可接受的字符列表 [a-z 0-9 + punctuation].

之外找到任何字符

如果您 post 一些示例数据,则更容易给出更明确的答案。不过你可能会尝试这样的事情。

DT[, lapply(.SD, stringr::str_detect, "^[^[[:print:]]]+$")]

它将 return 一个相同大小的 data.table,但是任何包含非字母数字、标点符号、and/or space 字符的字符串都将被替换为 TRUE,其他所有内容都替换为 FALSE。这将是我对您关于想要检测包含这些字符的值的问题的解释。

您可以通过将 str_detect 替换为您想要的任何基本 R 或 stringr 函数来更改行为,并根据需要稍微修改正则表达式。例如,您可以使用以下代码删除违规字符。

DT[, lapply(.SD, stringr::str_replace_all, "[^[[:print:]]]", "")]