使用substr直到满足条件

时间:2014-08-25 17:01:12

标签: r conditional-statements symbols substr

我有一个向量,我只需要第一个单词。这些词有不同的长度。单词由符号(。和_)分隔。如何使用substr()函数获取仅包含第一个单词的新向量?

我在想这样的事情

x <- c("wooombel.ab","mugran.cd","friendly_ef.ab","hungry_kd.xy")
y <- substr(x,0, ???)

4 个答案:

答案 0 :(得分:4)

我认为sub带有一些正则表达式是最简单的解决方案:

sub(pattern = "[._].*", replacement = "", x = x)
# [1] "wooombel" "mugran"   "friendly" "hungry"

答案 1 :(得分:2)

尝试:

sapply(strsplit(x,'[._]'), function(x) x[1])
[1] "wooombel" "mugran"   "friendly" "hungry"  

答案 2 :(得分:2)

您也可以使用包stringr。它有一些非常方便的字符串操作功能。

这个问题的一个问题是word。它有一个sep参数,允许使用正则表达式。

> x <- c("wooombel.ab","mugran.cd","friendly_ef.ab","hungry_kd.xy")
> library(stringr)
> word(x, sep = "[._]")
# [1] "wooombel" "mugran"   "friendly" "hungry"  

允许您继续使用substr的另一个选项是str_locate。因此,如果我们只从结果中减去1,我们就可以获得所需的第一个单词。

> substr(x, 1, str_locate(x, "[._]")-1)
# [1] "wooombel" "mugran"   "friendly" "hungry"   

答案 3 :(得分:1)

使用stringi的提取方法:

library(stringi)
stri_extract_first_regex(x, "[a-z]+(?=[._])")

## [1] "wooombel" "mugran"   "friendly" "hungry"  

虽然"[^a-z]+(?=[._])"可能更明确。

Regex explanation:

[^a-z]+                  any character except: 'a' to 'z' (1 or
                         more times)
(?=                      look ahead to see if there is:
  [._]                     any character of: '.', '_'
)                        end of look-ahead