如何在R中的大列表的单个单元格中添加多个数值

时间:2019-05-22 15:32:56

标签: r dataframe

您好,我想根据shipping_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 个答案:

答案 0 :(得分:1)

因为您使用的是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等。