我正在尝试用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
解决这个问题的最佳方法是什么?
期待您的想法!
谢谢
答案 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)