如何用字符串和数字协调数据框中的列(仅获取数字)?

how can I harmonized columns in a data frame with string and number (getting only numbers)?

我正在尝试在 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

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

一种方法是在 || 上拆分并使用 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

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

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