2017-08-04 80 views
2

提取3位数字,我有以下数据ř只有从字符串

data <- data.frame(make=c("af455f5","255tfd4d3","ojt100","12unin234mimo24","sh469dh","6ht6k778k9","kjh457"), 
       type=c("a","a","a","a","b","a","b")) 

我只希望从“制造”的元素中提取任何三位数如果相应的类型是“A”。

我试过使用gsub,但似乎只能提取组合字符串中的所有数字。

我在寻找的结果如下

result <- c("455","255","100","234","778") 

回答

2

这看上去好像是你想要做什么。

library(stringr) 
str_extract(data$make,"[0-9]{3}")[data$type=="a"] 

结果:

[1] "455" "255" "100" "234" "778" 

希望这有助于!

1

这里是我的答案:

library(stringr) 

str_extract(data$make[data$type == 'a'], '[0-9]{3}') 

## "455" "255" "100" "234" "778" 
1

我们可以使用base R方式完成本次

v1 <- data$make[data$type == "a"] 
regmatches(v1, regexpr("[0-9]{3}", v1)) 
#[1] "455" "255" "100" "234" "778" 

或用sub

sub("^.*([0-9]{3}).*", "\\1", v1) 
#[1] "455" "255" "100" "234" "778" 
0

它也可以用个实现Èstrapplycgsubfn包:

result <- sapply(as.character(df$make[df$type=='a']), 
      function(x) strapplyc(x, "\\d{3}", simplify = TRUE)) 

输出:

result 
# af455f5  255tfd4d3   ojt100 12unin234mimo24  6ht6k778k9 
# "455"   "255"   "100"   "234"   "778"