R-lang:如果等于引号,则删除第一个字符

时间:2015-01-28 21:54:21

标签: regex r gsub

R新手。我试图从数据框中的一行的开头和结尾删除“。如果引号不是第一个或最后一个字符,我不想删除。我不知道为什么以下内容不能正常工作数据的数据框,其中每一行是文本的数据点。

报价不是由于是字符串,而是文本的一部分。

数据框的一行看起来像这样:

x<-  '"hello world. She said, "hello again" it was a pleasant response"'

结果应为:

x2 <- 'hello world. She said, "hello again" it was a pleasant response"'

我认为这样可行:

gsub("\\n\"", "", df)

但是,这不起作用。建议?

2 个答案:

答案 0 :(得分:5)

你可以修改字符串末尾的引号,如下所示:

x <- gsub('"$','',x)

并从字符串的开头像这样:

x <- gsub('^"','',x)

因为字符$^匹配字符串的结尾和开头。例如:

myData<-data.frame(foo=c('"asdf"','ASDF'),
                   bar=c('jkl;','"JKL;"'))
myData
#>     foo    bar
#>1 "asdf"   jkl;
#>2   ASDF "JKL;"

# trim the quote characters from myData$foo
myData$foo <- gsub("^\"|\"$", "", myData$foo)
myData

#>   foo    bar
#>1 asdf   jkl;
#>2 ASDF "JKL;"

答案 1 :(得分:0)

另一个选项是 trimws,它将删除字符串开头或结尾的 all "

trimws(x, whitespace = '"')
#[1] "hello world. She said, \"hello again\" it was a pleasant response"

或者只是从头开始:

trimws(x, "left", '"')
#[1] "hello world. She said, \"hello again\" it was a pleasant response\""

另一种选择可能是使用 startsWithsubstring

if(startsWith(x, '"')) substring(x, 2) else x
#[1] "hello world. She said, \"hello again\" it was a pleasant response\""