假设我有以下向量:
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等字串的中间部分。这是一个例子,在我的数据,有许多可能性的字母组合。
因此,所需的输出将是:
"@Accessoires [COLL]"
"@Accessoires [COLL]"
"@Components [COLL]"
"@Components [COLL]"
"@Accessoires [COLL]"
"@Components [COLL]" 我的问题是,如何在R中实现这一点,而不必定义所有字母组合?
发布于 2018-08-20 09:27:02
您可以使用sub()和一些正则表达式:
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。
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发布于 2018-08-20 09:58:25
在空间上拆分,得到第一个也是最后一个元素:
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]" 发布于 2018-08-20 09:28:38
df不是data.frame,而是字符向量。您可以使用gsub删除空格之间的任何内容。
gsub(" .* ", " ", df)
[1] "@Accessoires [COLL]" "@Accessoires [COLL]" "@Components [COLL]" "@Components [COLL]" "@Accessoires [COLL]" "@Components [COLL]" 这就是你要找的吗?
https://stackoverflow.com/questions/51927702
复制相似问题