我有一个字符"abc"
,想要删除"b"
。我想按位置定位。我试过了:
x <- "abc"
substr(x, 2,3) <- ""
x
#[1] "abc"
为什么不能从这样的字符串中删除字符?我怎么用同样简单的方法做到这一点?
答案 0 :(得分:3)
琐碎的是,你可以在这里使用sub/gsub
:
gsub("b", "", x)
但这会删除所有b
个字母,无论它们出现在何处。如果您想将b
定位在仅a
和c
之间,您可以变得聪明并使用外观:
gsub("(?<=a)b(?=c)", "", x, perl=TRUE)
修改强>
正如@DavidKlotz在下面的评论中所指出的,如果你真的想删除第二个字符,你可以使用:
gsub("(?<=^.).","", x, perl=TRUE)
答案 1 :(得分:2)
似乎不支持空字符串。
我认为破解它的最简单方法是使用一个可能不在您的数据中的字符,然后gsub
出来:
x <- "abc"
substr(x, 2,3) <- "\a"
x <- gsub("\a","",x)
x
# [1] "ac"
您当然可以直接使用gsub
作为其他建议,但我认为通过索引替换是一个重要的功能。
\a
是来自维基百科的铃声角色:
铃声代码(有时是铃声字符)是设备控制代码 最初发送到一个小的机电钟上的报警器和 其他电传打字机和电传打字机提醒操作员另一方 行尾,通常是收到的消息
所以你可能安全!
答案 2 :(得分:1)
你可以随时使用strsplit
这是有用的如果你想按位置解决这个问题(例如在你的情况下删除第二个字母),
paste(strsplit(x, '')[[1]][-2], collapse = '')
#[1] "ac"
要应用于多个字符串,我们需要在拆分后进行迭代,即
x <- c('abc', 'sdfre', 'xyz')
sapply(strsplit(x, ''), function(i)paste(i[-2], collapse = ''))
#[1] "ac" "sfre" "xz"
答案 3 :(得分:0)
你应该使用gsub()函数:
gsub(pattern = "b",replacement = "",x = x)
答案 4 :(得分:0)
你说你“想要按位置定位”,如果你的意思是你想要从你的字符串中提取第二个字符而不管它的值,那么你可以简单地做:< / p>
x <- paste0(substr(x, 1, 1), substr(x, 3, nchar(x)))
# "ac" if x <- "abc" initially and "acd" if x <- "abcd" initially
您可以使用substr()
替换字符,但不能将其删除(因为您需要移动所有后续字符的位置等)。要实现此目的,您可以将substr
和gsub
组合在一起(例如,如果您确定您的字符串不包含短划线):
substr(x, 2, 3) <- '-'
gsub('-', '', x)
如果您要删除"b"
出现的内容,则gsub()
如上面的答案中所述是一个不错的选择。