如何在 R 中使用 gsub 删除以字母开头的字符串?
How to remove strings that start with alphabet using gsub in R?
我收集了推文,我想从每条推文中提取表情符号 unicode。表情符号 unicode 是 <U+00001F44D>
格式,我在 R 上使用 gsub
函数使用函数
删除表情符号前后的所有文本
tweets$text <- gsub(".*(<.*>).*", "\1", tweets$text)
但是,因为每条推文可能有多个表情符号,所以我决定在字符“>”之后拆分每一列。
在某些列中,有些字符串只是字母字符而不以“<”开头。
我的问题是:如果字符串不是以“<”开头,我该如何删除它?
示例:
data$text <- c("<U+000>", "character", "abc <U+000>")
data$text <- gsub(".*(<.*>).*", "\1", data$text)
数据仍将包含 "character" 字符串,但我正在尝试删除除表情符号 unicode 之外的所有字符。
我们可以用grep
代替gsub
grep("^\<", v1, invert = TRUE, value = TRUE)
#[1] "<U+000>"
如果我们需要提取表情符号并删除其余字符,我们可以使用 stringr
中的 str_extract
。指定要匹配的正则表达式,即 <
是一个元字符,因此我们可以将其转义 (\<
),后跟一个或多个不是 >
的字符(在方括号内将评估文字字符 - ^
- 表示不是该字符)后跟 >
(再次转义 \
)
library(stringr)
str_extract(v1, "\<[^>]+\>")
#[1] "<U+000>" NA "<U+000>"
如果有多个元素我们需要创建多个列
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
regmatches(v1, regexpr("\<[^>]+\>", v1, perl = TRUE))
#[1] "<U+000>" "<U+000>"
数据
v1 <- c("<U+000>", "character", "abc <U+000>")
v2 <- c(v1, "<U+000> characters <U+000>")
dat <- data.frame(v2 = v2, stringsAsFactors = FALSE)
我收集了推文,我想从每条推文中提取表情符号 unicode。表情符号 unicode 是 <U+00001F44D>
格式,我在 R 上使用 gsub
函数使用函数
tweets$text <- gsub(".*(<.*>).*", "\1", tweets$text)
但是,因为每条推文可能有多个表情符号,所以我决定在字符“>”之后拆分每一列。
在某些列中,有些字符串只是字母字符而不以“<”开头。
我的问题是:如果字符串不是以“<”开头,我该如何删除它?
示例:
data$text <- c("<U+000>", "character", "abc <U+000>")
data$text <- gsub(".*(<.*>).*", "\1", data$text)
数据仍将包含 "character" 字符串,但我正在尝试删除除表情符号 unicode 之外的所有字符。
我们可以用grep
代替gsub
grep("^\<", v1, invert = TRUE, value = TRUE)
#[1] "<U+000>"
如果我们需要提取表情符号并删除其余字符,我们可以使用 stringr
中的 str_extract
。指定要匹配的正则表达式,即 <
是一个元字符,因此我们可以将其转义 (\<
),后跟一个或多个不是 >
的字符(在方括号内将评估文字字符 - ^
- 表示不是该字符)后跟 >
(再次转义 \
)
library(stringr)
str_extract(v1, "\<[^>]+\>")
#[1] "<U+000>" NA "<U+000>"
如果有多个元素我们需要创建多个列
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
regmatches(v1, regexpr("\<[^>]+\>", v1, perl = TRUE))
#[1] "<U+000>" "<U+000>"
数据
v1 <- c("<U+000>", "character", "abc <U+000>")
v2 <- c(v1, "<U+000> characters <U+000>")
dat <- data.frame(v2 = v2, stringsAsFactors = FALSE)