Как я могу согласовать столбцы в кадре данных со строкой и номером (получить только цифры)? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь гармонизировать мой df в R. У меня есть столбец, который был заполнен с использованием разных форматов. например:

    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 Ответ

1 голос
/ 04 апреля 2019

Один из способов - разделить на || и использовать 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))
...