在数据框中替换特殊字符。

3
我有一个数据框,其中不同的单元格包含我知道的一个特殊字符。以下是该结构的示例:
df = data.frame(col_1 = c("21 myspec^ch2 12",NA), 
                col_2 = c("1 myspec^ch2 4","4 myspec^ch2 212"))

这段文字的意思是:“这个字符是 myspec^ch2,我想将它替换为 -。预期输出如下:”。
df = data.frame(col_1 = c("21-12",NA), 
                col_2 = c("1-4","4-212"))

我尝试过这个,但它没有起作用:
df [ df == " myspec^ch2 " ] <- "-"

你可能想要了解一下 gsub() - tobiasegli_te
@tobiasegli_te 这个 gsub(" myspec^ch2 ", "-", df) 不成功,需要修改。 - PitterJe
1
尝试使用gsub(" myspec^ch2 ", "-", df $ col_1, fixed = T)。还要寻找有关如何索引和操作数据框的教程,这是非常基础且好的起点。 - tobiasegli_te
1
apply(df, 2, function(x) gsub(" myspec\\^ch2 ", "-", x)) - pogibas
@tobiasegli_te 谢谢,我会尝试,但是这是针对整个数据框而不仅仅是一个列。 - PitterJe
使用@PoGibas所说的apply,并使用@tobiasegli_te所说的fixed = TRUE,你就可以完成了。 - neilfws
2个回答

3
使用apply使gsub作用于整个数据框:
apply(df, 2, function(x) gsub(" myspec\\^ch2 ", "-", x))

1
可以使用 fixed = TRUE 代替转义特殊字符。 - neilfws
1
谢谢。它有效。只是想问一下,2代表什么意思呢? - PitterJe
1
很高兴能帮忙!apply1一起使用可以迭代行,而apply2一起使用可以迭代列。 - pogibas

1

您真的想在这里进行正则表达式替换。但是,在正则表达式中,^被视为行的开头(而不是字面意义上的插入符号)。因此,您可以像这样做(使用stringr包):

library(dplyr)
library(stringr)

fixed_df  <- df %>%
    mutate_all(funs(str_replace_all( . , " myspec\\^ch2 ", "-"))

请注意插入符号前面的双反斜杠--这样可以转义插入符号并告诉R按字面意思解释,而不是将其视为行开头。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接