R中使用gsub进行条件多模式替换

时间:2019-05-13 15:19:43

标签: r

我正在尝试用R中的gsub和grep替换多个模式。

我拥有的是一位和两位数的模式,即

 [1] 30 20 15 15 10 10 5  5  3  3  15 15 7  3  3  5  5  3  3  30 30 20 20 15 
Levels: 3 5 7 10 15 20 30

我想为每个变量添加一个“ Y”,以产生以下输出:

 [1] 30Y 20Y 15Y 15Y 10Y 10Y 5Y  5Y  3Y  3Y  15Y 15Y 7Y  3Y  3Y  5Y  5Y  3Y  3Y  30Y
Levels: 3Y 5Y 7Y 10Y 15Y 20Y 30Y

我正在努力将其更改为两位数和两位数。

这是我到目前为止尝试过的。

tbl %>% 
  mutate(col1 = gsub("([0-9])([0-9])","\\1\\2Y",col1)) %>%
  mutate(col1 = gsub(!grep("[0-9][A-Z]",col1),"\\1Y",col1)) 

我当前的输出是

 [1] 30Y 20Y 15Y 15Y 10Y 10Y 5  5  3  3 15Y 15Y 7  3  3  5  5  3  3  30Y
Levels: 3 5 7 10Y 15Y 20Y 30Y

解决这个问题的最佳方法是什么?

期待您的想法!

谢谢

2 个答案:

答案 0 :(得分:3)

为什么不在这里使用paste

tbl$col1 <- paste0(tbl$col1, "Y")

请注意,以上内容会将col1转换为字符,您可能会接受也可能无法接受。另外,我什至建议您进行col1的这种转换。相反,请考虑只保留原始数字数据,然后如果想以某种方式查看该数据,请使用paste

我们也可以在此处使用sub

tbl$col1 <- sub("$", "Y", tbl$col1)

答案 1 :(得分:0)

如果您坚持使用gsub,则可以执行以下操作:

 gsub("(\\d+)", "\\1Y", col1)