无法从字符串中删除尾随空格

Not being able to remove trailing spaces from character strings

提问人:nouse 提问时间:11/8/2023 最后编辑:nouse 更新时间:11/8/2023 访问量:36

问:

我有一个非常奇怪的数据框列(结构为“chr”):

metadata$dummy
  [1] "SKF1_sample_037 "  "SKF3_sample_040 "

尾随空格已在 excel 文件中。文件另存为制表符分隔的文本,并用

metadata <- read.table("some_name.txt", sep="\t", header = T,
                       fileEncoding='latin1', check.names = F, row.names = 1)

请注意,如果没有参数,R 无法读取文件fileEncoding='latin1'

Error in make.names(col.names, unique = TRUE) : 
      invalid multibyte string 3

excel 中的 TRIM(X) 函数也不起作用。删除空格的唯一方法是在每个单元格中手动使用退格键,但这是不可能的。

如果我现在想删除 R 中的尾随空格,什么都不起作用:

library(stringr)
metadata$dummy <- str_replace_all(metadata$dummy, fixed(" "), "")
metadata$dummy <- gsub(" ", "", metadata$dummy, fixed = TRUE)
metadata$dummy <- trimws(metadata$dummy, "r")

所有这些命令都会生成带有尾随空格的相同字符串

metadata$dummy
  [1] "SKF1_sample_037 "  "SKF3_sample_040 "

什么样的错误会导致这种行为?

/编辑:

我也无法使用记事本++中的简单“将任何空格替换为无”命令从文本文件中删除任何空格

r excel

评论

1赞 SamR 11/8/2023
它可能不是一个空格,而是一个不同的 unicode 字符,似乎被打印为一个字符。你能发布 的输出吗?如果它是一个实际空间,它应该是 .charToRaw(sub("SKF1_sample_\\d{3}", "", metadata$dummy[1]))20
0赞 nouse 11/8/2023
我必须对第二个值执行此操作,因为我确实已经在 excel 中手动更改了第一个值。但这里: charToRaw(sub(“SKF1_sample_\\d{3}”, “”, metadata$dummy[2])) [1] 53 4b 46 33 5f 73 61 6d 70 6c 65 5f 30 34 30 c2 a0
0赞 Gregor Thomas 11/8/2023
您可以尝试使用与几种类型的空格匹配的正则表达式特殊字符,\sgsub("\\s", "", metadata$dummy)
0赞 SamR 11/8/2023
@GregorThomas通常是一个好主意,但在这种情况下不起作用。
1赞 nouse 11/8/2023
显然,我没有看到你的答案,对不起!

答:

1赞 SamR 11/8/2023 #1

你的角色不是一个空间,这就是为什么不起作用。你有一个不间断的空间。您应该能够在文本编辑器中生成一个:trimws()

Alt + 0 + 1 + 6 + 0

(您需要使用数字键盘,而不是字母上方的数字键。

要特别替换此字符,您可以执行以下操作:

gsub(rawToChar(as.raw(c(0xc2, 0xa0))), "", metadata$dummy)

或者,您可以列出要保留的所有字符。在这种情况下,我放置了字母、数字和下划线:

gsub("[^A-Za-z0-9_]", "", metadata$dummy)

评论

1赞 nouse 11/8/2023
我使用了 gsub 命令,它运行良好。谢谢!