Как добавить несколько числовых значений в одну ячейку большого списка в R - PullRequest
0 голосов
/ 22 мая 2019

Привет. Я хочу вычислить сумму количества товара по shipment_id.У меня есть датафрейм с двумя столбцами.

    shipment_id    details
    XYQWE13        [{"orderid"=1,"quantity"=>2},{"orderid"=2,"quantity"=>1}]
    UYTDW54        [{"orderid"=1,"quantity"=>5},{"orderid"=2,"quantity"=>5}]
    SKFEF32        [{"orderid"=1,"quantity"=>2},{"orderid"=2,"quantity"=>1},{"orderid"=3,"quantity"=>5}]

Так что мне придется получать числовое значение только после количественной части.Я попробовал это, чтобы извлечь количество и число против него

    y <- stringr::str_extract_all(string = raw_data_shipment2$details, pattern = '"quantity"=>[0-99]+')

Что дало мне большой список

     Name           Type                   Value 
     y              list(3)                List of length 3
     [[1]]          character [1]          '"quantity"=>2''"quantity"=>1'
     [[2]]          character [1]          '"quantity"=>5''"quantity"=>5'
     [[2]]          character [1]          '"quantity"=>2''"quantity"=>1''"quantity"=>5'

Дальнейшее использование этого

     y2 <- stringr::str_extract_all(string = y, pattern = '=>[0-99]+')
     y3 <- stringr::str_extract_all(string = y2, pattern = '[0-99]+')

Дали мне эторезультат этого большого списка

     Name           Type                   Value 
     y3             list(3)                List of length 3
     [[1]]          character [1]          '2''1'
     [[2]]          character [1]          '5''5'
     [[2]]          character [1]          '2''1''5' 

Теперь я хотел бы сложить числовую часть и надеялся, что смогу связать ее с моим исходным кадром данных.Но я застрял на том, как подвести итог.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 22 мая 2019

Поскольку вы используете stringr, я собираюсь предположить, что вы используете другие tidyverse пакеты, в частности purrr. Если вы, вы должны использовать функцию map для суммирования y1, y2, y3 и т. Д .:

z1 <- purrr::map(y1, ~sum(as.numeric(.)))
z2 <- purrr::map(y2, ~sum(as.numeric(.)))
z3 <- purrr::map(y3, ~sum(as.numeric(.)))

Тогда вы можете связать z1, z2, z3 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...