我需要从字符串中提取前两个单词。如果字符串包含2个以上的单词,则应返回前2个单词;否则,如果字符串包含2个以下的单词,则应按原样返回字符串。
我已经尝试过使用stringr包中的'word'函数,但是在len(string)<2的情况下,它没有提供期望的输出。
word(dt$var_containing_strings, 1,2, sep=" ")
示例:
输入字符串:汽车贷款(个人)
输出:自动贷款
输入字符串:其他 输出:其他
答案 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
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")