如何将数据框中的列与字符串和数字统一(仅获取数字)?

时间:2019-04-04 08:35:07

标签: r regex stringr

我正在尝试协调R中的df。我有一列已使用不同格式填充 例如:

    ID       value
    1   first value in 5' = 9 || second value in 20' = 8
    2   first value in 5' = 6 || second value in 20' = 12
    3   5,6
    4   7,8
    5   9  10 

到目前为止我要尝试的是

     library(stringr)
     df <- read.table("data", sep="\t", header = T)
     value2 <- df$value %>% str_match_all("[0-9]+") %>% unlist %>% as.numeric

我希望这个输出

    ID       value
    1        9,8
    2        6,12
    3        5,6
    4        7,8
    5        9,10 

但是显然,实际输出是字符串[1] 9 8 6 12 5 6 7 8 9 10

根据您的经验,有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是分割||并使用gsub提取=之后的值。然后,我们可以使用toString()来汇总它们,即

library(tidyverse)

dd %>% 
 separate_rows(value, sep = ' \\|\\| ') %>% 
 mutate(value = gsub('.*=', '', value)) %>% 
 group_by(ID) %>% 
 summarise(value = toString(value))

给出,

# A tibble: 5 x 2
     ID value    
  <int> <chr>    
1     1 " 9,  8" 
2     2 " 6,  12"
3     3 5,6      
4     4 7,8      
5     5 9 10

编辑:要将最后一个空格也转换为逗号,我们可以在管道中添加另一个mutate,即

dd %>% 
     separate_rows(value, sep = ' \\|\\| ') %>% 
     mutate(value = gsub('.*=', '', value)) %>% 
     group_by(ID) %>% 
     summarise(value = toString(value)) %>%
     mutate(value = gsub(' ', ',', value))