首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移除两个字符串之间的字符串

移除两个字符串之间的字符串
EN

Stack Overflow用户
提问于 2018-08-20 09:24:48
回答 3查看 68关注 0票数 0

假设我有以下向量:

代码语言:javascript
复制
df<- c("@Accessoires A-B [COLL]", "@Accessoires C-D [COLL]",
        "@Components A-D [COLL]","@Components [COLL]", 
        "@Accessoires [COLL]", "@Components H-Z [COLL]")

我想移除A-B或C等字串的中间部分。这是一个例子,在我的数据,有许多可能性的字母组合。

因此,所需的输出将是:

代码语言:javascript
复制
"@Accessoires [COLL]" 
"@Accessoires [COLL]" 
"@Components [COLL]"  
"@Components [COLL]"  
"@Accessoires [COLL]" 
"@Components [COLL]" 

我的问题是,如何在R中实现这一点,而不必定义所有字母组合?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-20 09:27:02

您可以使用sub()和一些正则表达式:

代码语言:javascript
复制
sub("\\s[A-Z]-[A-Z]\\s", " ", df)
[1] "@Accessoires [COLL]" "@Accessoires [COLL]" "@Components [COLL]"  "@Components [COLL]" 
[5] "@Accessoires [COLL]" "@Components [COLL]" 

正则表达式归结为:

  • \\s:一个空间
  • [A-Z]:任何(英文)大写字母。

顺便说一句,您的df是向量,但不是data.frame

代码语言:javascript
复制
df <- c(
  "@Accessoires A-B [COLL]", "@Accessoires C-D [COLL]","@Components A-D [COLL]",
  "@Components [COLL]", "@Accessoires [COLL]","@Components H-Z [COLL]"
)
is.data.frame(df)
[1] FALSE
票数 2
EN

Stack Overflow用户

发布于 2018-08-20 09:58:25

在空间上拆分,得到第一个也是最后一个元素:

代码语言:javascript
复制
sapply(strsplit(df, " "), function(i) paste(head(i, 1), tail(i, 1)))

# [1] "@Accessoires [COLL]" "@Accessoires [COLL]" "@Components [COLL]" 
# [4] "@Components [COLL]"  "@Accessoires [COLL]" "@Components [COLL]" 
票数 1
EN

Stack Overflow用户

发布于 2018-08-20 09:28:38

df不是data.frame,而是字符向量。您可以使用gsub删除空格之间的任何内容。

代码语言:javascript
复制
gsub(" .* ", " ", df)
[1] "@Accessoires [COLL]" "@Accessoires [COLL]" "@Components [COLL]"  "@Components [COLL]"  "@Accessoires [COLL]" "@Components [COLL]" 

这就是你要找的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51927702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档