在以下示例中,如何在italic(P) == 0
italic(P) < 0.001
时替换这些实例?
df <- structure(list(STRING = c("italic(R)^2 == 0.15 * \",\" ~ italic(P) == 0", "italic(R)^2 == 0 * \",\" ~ italic(P) == 0",
"italic(R)^2 == 0.17 * \",\" ~ italic(P) == 0", "italic(R)^2 == 0.15 * \",\" ~ italic(P) == 0",
"italic(R)^2 == 0 * \",\" ~ italic(P) == 0", "italic(R)^2 == 0.07 * \",\" ~ italic(P) == 0.002",
"italic(R)^2 == 0.12 * \",\" ~ italic(P) == 0", "italic(R)^2 == 0.11 * \",\" ~ italic(P) == 0",
"italic(R)^2 == 0.06 * \",\" ~ italic(P) == 0.006", "italic(R)^2 == 0.08 * \",\" ~ italic(P) == 0.001"
)), .Names = c("STRING"), row.names = c(NA, -10L), class = "data.frame")
我尝试了gsub("== 0", "< 0.001", df$STRING)
,但这显然是错误的,因为它会替换所有其他实例,例如找到模式。我只想替换那些0
而不是0.
我可以在fix(df)
弹出窗口中手动更改它,但这不是一个好习惯。
答案 0 :(得分:3)
我觉得你差不多了。将$
放在表达式的末尾只匹配字符串末尾出现== 0
的字符串。
gsub("== 0$", "< 0.001", df$STRING)
这假设== 0
实际上仅在结尾处发生(如在您的示例中)。如果它也出现在“mid-string”中,则可以找到更复杂的表达式。但是,我认为清理这些字符串并使用"== 0$"
是更清晰的解决方案。
编辑:
对更复杂的字符串进行修改需要更复杂的表达式。根据您更新的问题,我能想到的最简单的解决方案是:
gsub("== 0( |$)", "< 0.001\\1", df$STRING)
这假设每个匹配后跟一个空格或字符串的结尾。 ()
是一个分组,\\1
是对该群组的反向引用。另请参阅@hwnd提供另一种解决方案的答案。
答案 1 :(得分:2)