首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中使用gsub删除以字母表开头的字符串?

如何在R中使用gsub删除以字母表开头的字符串?
EN

Stack Overflow用户
提问于 2019-07-27 15:14:17
回答 1查看 620关注 0票数 1

我收集了推文,我想从每条推文中提取表情符号unicode。这个符号是<U+00001F44D>格式的,我使用了R上的gsub函数来删除表情符号之前和之后的所有文本。

代码语言:javascript
复制
tweets$text <- gsub(".*(<.*>).*", "\\1", tweets$text)

然而,由于每个推特上可能有几个表情符号,所以我决定在字符">“之后分割每一列。

在某些列中,有些字符串只是字母表字符,而不是以"<“开头。

我的问题是:如果字符串没有以"<“开头,如何删除它?

示例:

代码语言:javascript
复制
data$text <- c("<U+000>", "character", "abc <U+000>")

data$text <- gsub(".*(<.*>).*", "\\1", data$text)

数据仍将包括“字符”字符串,但我正在尝试删除除表情符号unicode以外的所有字符。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-27 15:27:20

我们可以用grep代替gsub

代码语言:javascript
复制
grep("^\\<", v1, invert = TRUE, value = TRUE)
#[1] "<U+000>"

如果我们需要提取表情符号并删除剩下的字符,我们可以从str_extract中使用stringr。指定要匹配的正则表达式,即<是元字符,因此我们可以转义它(\\<),后面跟着一个或多个不是>的字符(方括号内将计算字面字符-- ^ -指的不是该字符),然后是> (再次转义\\)。

代码语言:javascript
复制
library(stringr)
str_extract(v1, "\\<[^>]+\\>")
#[1] "<U+000>" NA        "<U+000>"

如果我们需要创建多个列,如果有多个元素

代码语言:javascript
复制
lst1  <- str_extract_all(dat$v2, "\\<[^>]+\\>")
n <- lengths(lst1) 
lapply(lst1, `length<-`,max(n)) 
dat[paste0("Col", seq_len(max(n)))] <- do.call(rbind,
       lapply(lst1, `length<-`,max(n)))

dat
#                          v2    Col1    Col2
#1                    <U+000> <U+000>    <NA>
#2                  character    <NA>    <NA>
#3                abc <U+000> <U+000>    <NA>
#4 <U+000> characters <U+000> <U+000> <U+000>

或者使用base R

代码语言:javascript
复制
regmatches(v1, regexpr("\\<[^>]+\\>", v1, perl = TRUE))
#[1] "<U+000>" "<U+000>"

数据

代码语言:javascript
复制
v1 <- c("<U+000>", "character", "abc <U+000>")
v2 <- c(v1, "<U+000> characters <U+000>")
dat <- data.frame(v2 = v2, stringsAsFactors = FALSE)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57233439

复制
相关文章

相似问题

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