如何更换 (新行)在 R 的整个数据框中带有“”

问题描述 投票:0回答:1

我需要将几十个 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 regex dataframe replace gsub
1个回答
0
投票

您的字符串中有

\\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)
© www.soinside.com 2019 - 2024. All rights reserved.