从字符串中删除尾随标点符号。

3
我想删除字符串末尾出现的所有破折号,但我的代码导致R崩溃。如有任何调整或修复代码的方法,将不胜感激!
acct_nm = str_replace_all(acct_nm, "[:punct:]+", "")

目前,我将其作为mutate的一部分进行了包装,不幸的是,我无法展示我的所有代码或包含我的数据。基本上,我想用acct_nm -替换acct_nm变量中的任何尾随标点符号。

例如,我希望它能够像下面的代码一样工作,其中变量y会删除所有尾随标点符号。

library(tidyverse)
test <- data.frame(x = 1:3, y = 'hello-./') %>% 
         mutate(z = str_replace_all(y, "[:punct:]+", ""))

enter image description here


1
请确保这个问题是可复现的。这包括提供样本数据(例如 dput(head(x))data.frame(x=...,y=...))和期望的输出结果。参考链接:https://dev59.com/eG025IYBdhLWcg3whGSx,https://stackoverflow.com/help/mcve 和 https://stackoverflow.com/tags/r/info。 - r2evans
请提供一个关于您的输入和预期输出的玩具示例。 - ThomasIsCoding
(a)你的代码替换了所有标点符号,而不是字符串末尾的所有破折号。使用类似"-+$"的模式来匹配字符串末尾的破折号。 (b)由于你的匹配是“在字符串末尾”,每个字符串只能有一个匹配。与其使用str_replace_all,不如直接使用str_replace。 (c)在崩溃之前是否发生了任何事情?是否有错误或警告?崩溃是立即发生的吗?你对这行代码导致崩溃有多确定? - Gregor Thomas
(d)我们不需要您的所有代码或数据,但是如果没有一点点,我认为我们无法提供太多帮助。请缩小问题范围并分享足够的信息以便复现。例如,您说这行代码被包含在mutate中。如果不包含在mutate中,它是否仍然会崩溃?您能否找到一个子集数据使其正常工作?或者更好的方法是,您能否找到一个子集数据使其出现问题?如果您在单个字符串“alkuo2332----”上运行它,它是否会崩溃?您能否找到一个简单的例子来重现这个问题? - Gregor Thomas
2个回答

7
你可以尝试使用sub/gsub函数,并将字符串末尾的标点符号去除。
sub('[[:punct:]]+$', '', test$y)
#[1] "-hello" "-hello" "-hello"

数据

test <- data.frame(x = 1:3, y = '-hello-./')

0

你可以尝试

df$z <- with(df,gsub("(.*?)[[:punct:]]+$","\\1",y))

给定数据框 df <- data.frame(x = 1:3, y = 'hello-./'),然后你会得到
> df
  x        y     z
1 1 hello-./ hello
2 2 hello-./ hello
3 3 hello-./ hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接