如何从R中的字符串中提取前2个单词?

时间:2019-07-18 09:23:26

标签: r string

我需要从字符串中提取前两个单词。如果字符串包含2个以上的单词,则应返回前2个单词;否则,如果字符串包含2个以下的单词,则应按原样返回字符串。

我已经尝试过使用stringr包中的'word'函数,但是在len(string)<2的情况下,它没有提供期望的输出。

word(dt$var_containing_strings, 1,2, sep=" ")

示例: 输入字符串:汽车贷款(个人)
输出:自动贷款

输入字符串:其他 输出:其他

3 个答案:

答案 0 :(得分:2)

像这样?

a <- "this is a character string"

unlist(strsplit(a, " "))[1:2]

[1] "this" "is" 

编辑: 要添加如果世界数小于2则返回原始字符串的部分,可以使用简单的if-else函数:

a <- "this is a character string"

words <- unlist(strsplit(a, " "))

if (length(words) > 2) {
  words[1:2]
} else {
  a
}

答案 1 :(得分:2)

您可以使用sub

在基数R中使用正则表达式
sub("(\\w+\\s+\\w+).*", "\\1", "Auto Loan (Personal)")
#[1] "Auto Loan"

如果文本中只有一个单词,也可以使用

sub("(\\w+\\s+\\w+).*", "\\1", "Auto")
#[1] "Auto"

说明:

在这里,我们提取圆括号内显示的模式(\\w+\\s+\\w+),这意味着:

\\w+一个单词,后跟\\s+空格,之后是\\w+另一个单词,因此,我们总共提取了两个单词。使用\\1中的向后引用sub完成提取。

答案 2 :(得分:1)

如果要使用stringr::word(),可以执行以下操作:

ifelse(is.na(word(x, 1, 2)), x, word(x, 1, 2))

[1] "Auto Loan" "Others" 

样本数据:

x <- c("Auto Loan (Personal)", "Others")