我需要将几十个 Excel 文件合并并清除到 R 中的一个数据库中。导入文件的 Excel 单元格中包含手动换行符的单元格阻止了一些进一步的步骤。这有多种不同的称呼:换行符、手动内容符、硬输入等。在 Excel 中,这是通过使用 Alt+Enter 组合获得的,并通过 Alt+010 值进行搜索。其效果是在一个 Excel 单元格内插入“输入”/换行符。如果这个描述还不够,我会尝试在某处上传示例文件。
将上述数据从 Excel 导入到 R 中的数据框中后,各个单元格或名称如下所示:
data <- as.data.frame(read_excel('sample_database1.xlsx'))
data[8]
> Select\r\none answer\r\nonly
> 1 dont\r\nknow
> 2 yes
> 3 no
这些 Excel 换行符写为 。我尝试用一个简单的命令替换它们
data <- gsub('[\n\r]',' ',fixed = TRUE,data)
但它弄乱了所有数据框:
> data[8]
> [1] "c(\"dont\\r\\nknow\", \"yes\", \"no\", \"no\", ...
然后,我尝试了对各个单元格的不同替换组合(我的理解是,后续使用 lapply 仅适用于数据框中的每个单元格)”
data[] <- lapply(data, gsub, pattern = "[\r\n]", replacement = " ", fixed = TRUE)
data[] <- lapply(data, gsub, pattern = "\r\n", replacement = " ", fixed = TRUE)
data[] <- lapply(data, gsub, pattern = "\\r\\n", replacement = " ", fixed = TRUE)
但它们似乎都没有任何用处,无论是数据还是变量名称。什么也没发生,数据集看起来是一样的。我不知道,也许我对这个问题想得太多了?也许我不明白 gsub 表达式中的某些内容?有人可以告诉我该往哪个方向走吗?
您的字符串中有
\\r
,当 cat
'd(不是 print
'd)到控制台时,该字符串将显示为 \r
。我们可以在这里看到差异:
txt <- '"c(\"dont\\r\\nknow\", \"yes\", \"no\", \"no\", ...'
txt
# [1] "\"c(\"dont\\r\\nknow\", \"yes\", \"no\", \"no\", ..."
cat(txt, "\n")
# "c("dont\r\nknow", "yes", "no", "no", ...
在这种情况下,我们也许需要寻找双反斜杠
gsub("\\\\[rn]", " ", txt)
# [1] "\"c(\"dont know\", \"yes\", \"no\", \"no\", ..."
如果您也在文本中嵌入了
[\n\r]
,也许您需要
gsub("([\r\n]|\\\\[rn])", " ", txt)