选择性地将“ - ”替换为“。”使用gsub()

时间:2017-12-12 15:50:14

标签: r gsub

> df <- data.frame(x=c('a-b','c-d','e-f'),y=c('[1-2]','(3-4)','[5-6)'),stringsAsFactors=F)
> df
    x     y
1 a-b [1-2]
2 c-d (3-4)
3 e-f [5-6)

我正在尝试使用gsub()来扫描df的所有列,但仅使用带有字母的列中的"-"替换".",以使其看起来像像这样:

> df
    x     y
1 a.b [1-2]
2 c.d (3-4)
3 e.f [5-6)

使用sapply(names(df), function(x) gsub("\\-", ".", df[, x]))不起作用:

> sapply(names(df), function(x) gsub("\\-", ".", df[, x]))
     x     y      
[1,] "a.b" "[1.2]"
[2,] "c.d" "(3.4)"
[3,] "e.f" "[5.6)"

是否有更好的方法可以使用gsub()make.names()之类的可以选择列的方法来执行此操作?

由于

1 个答案:

答案 0 :(得分:2)

我们可以更改pattern以替换字母之间的-

df[] <- lapply(df, gsub, pattern = '([[:alpha:]]+)-([[:alpha:]]+)',  replacement ="\\1.\\2")
df
#    x     y
#1 a.b [1-2]
#2 c.d (3-4)
#3 e.f [5-6)