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

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

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

除了在破折号后提取所有内容外,我该如何做同样的事情?IE

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

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

4

4 回答 4

3

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

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

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

sub('.*-', '', x)
于 2013-11-11T22:24:43.660 回答
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
于 2013-11-11T22:35:08.560 回答
1

您可以使用strsplit和的组合lapply

破折号之前:

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"  
于 2013-11-11T22:21:12.657 回答
0

尝试这个:

substr(x,1,as.vector(regexpr("-",x))-1)
于 2013-11-11T22:29:33.690 回答