【发布时间】:2018-10-19 08:12:10
【问题描述】:
我正在尝试替换列中与gsub 函数中的模式不匹配的字符。
数据列:
library(tidyverse)
df <- structure(list(partij_kort = c("COMBGB", "VVD", "GL", "NIEUWEL",
"CDA")), .Names = "partij_kort", row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
partij_kort
<chr>
1 COMBGB
2 VVD
3 GL
4 NIEUWEL
5 CDA
这段代码与我想要的相反:
df %>% mutate(new = gsub("VVD|GL|CDA|CU|D66|PVDA|CUSGP|SGP|PVDAGL",
"something",
partij_kort))
partij_kort new
<chr> <chr>
1 COMBGB COMBGB
2 VVD something
3 GL something
4 NIEUWEL NIEUWEL
5 CDA something
我希望在该模式中不的每个字符串(COMBGB 和 NIEUWEL)都更改为 something。
但是感叹号 ! 不适用于 gsub(我在 grepl 中经常使用它)。
期望的结果:
partij_kort new
<chr> <chr>
1 COMBGB something
2 VVD VVD
3 GL GL
4 NIEUWEL something
5 CDA CDA
最好的方法是什么?
【问题讨论】:
-
尝试
"^(?!(?:VVD|GL|CDA|CU|D66|PVDA|CUSGP|SGP|PVDAGL)$).*"并将perl=TRUE添加到gsub调用中作为最后一个参数。如果您需要替换列表中替代词以外的任何值,它将起作用。我只是怀疑这是最好的方法。 -
或将
,invert = TRUE与grep或!与grepl结合 -
在 gsub 函数中?您能否详细说明答案?
-
partij_kort可以包含SGP ABC值吗?如果是,new列的预期结果是什么? -
我刚刚在问题中添加了我想要的结果。