提取字符串的一部分(用于字符串向量)

时间:2013-11-11 22:18:06

标签: r

x<-c("123-12","12-24","6-4")

如何在破折号之前将每个字符串的部分提取到新的向量中?在这个例子中,我的结果应该等同于

c("123","12","6")

我如何做同样的事情,除了在破折号后提取所有东西?即。

c("12","24","4")

对于我的问题,你可以假设x的每个元素都有一个且只有一个破折号。

4 个答案:

答案 0 :(得分:3)

要在破折号之前提取字符串,请将破折号和后面的所有内容替换为空字符串。

sub('-.*', '', x)

要在破折号后提取字符串,请执行相反的操作

sub('.*-', '', x)

答案 1 :(得分:2)

这是另一种方式,除了将值转换为数字类型之外还有其他好处:

d <- read.table(text=x, sep='-')
#    V1 V2
# 1 123 12
# 2  12 24
# 3   6  4

然后我们有:

d[,1]
# [1] 123  12   6
d[,2]
# [1] 12 24  4

答案 2 :(得分:1)

您可以结合使用strsplitlapply

破折号之前:

b <- unlist(lapply(strsplit(x, "-"), function(x) x[1]))
> b
[1] "123" "12"  "6" 

破折号后:

a <- unlist(lapply(strsplit(x, "-"), function(x) x[2]))
> a
"12" "24" "4"  

答案 3 :(得分:0)

试试这个:

substr(x,1,as.vector(regexpr("-",x))-1)