[问题] 符合条件后,将下一行的资料利用

楼主: bedroom0204 (khkh)   2022-11-21 18:54:16
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
我有一组资料,如下图左。
每个Product跟Sku会进行N次测试,但我只想要留都成功的组合。
如Product1 & M,测试了3次,但我只想要留Product1 M 2022/10/25 23:18这笔。
而Product2 & S,最后一笔的Result1 & Result2有NG的状况,
所以我要借用前一个OK的那笔。
最后整理结果如下图右。
我目前的想法不是用group_by,而是从for 循环去逐row看是否NG,
如果NG再看下一row是否为同一product和sku,
如果是的话,便将下一row的值贴上此row。
但不知道有没有比较好的做法。
https://imgur.com/z7FPje9
===============================================================
简单来说我想要组合同一个product & sku下的结果,
如前所述的product2 & S,11:58的result 3 & 4有OK,所以要保留,
但result 1&2的NG就要取用9:48的结果。
我一开始也想尝试用group_by,
但是group_by(product, sku)后,
我目前仅会列出根据时间的最后一笔(arrange后summarise_all(last)),
而不知道怎么把group_by后的结果作上述的组合动作。
[环境叙述]:
Windows
R-4.0.3
[关键字]:
dplyr
summarise
row
作者: DavidDX (皮猴轩)   2022-11-21 21:47:00
有点看不太懂,但是整体来说是不管有几笔资料,只要其中一笔资料的results 1有OK的结果,就是OK。 不知道我这样理解是否对?
作者: fox1375 (阿吠)   2022-11-21 22:10:00
不用group_by有什么特殊考量吗?循环应该会比较慢
作者: Wush978 (拒看低质媒体)   2022-11-22 08:47:00
因为你的逻辑有顺序问题,建议用SQL的window clauseR我目前不知道有没有window clause的替代品
作者: lycantrope (阿宽)   2022-11-22 09:47:00
没有顺序问题吧,最终结果不就只是看有OK就取OK.
作者: SonicJuice (光阴四溅)   2022-11-22 18:09:00
看起来可以拆分两部分作业, 在每组product, sku找出一个符合你要求的date, 再找出result1-4的适合值, 最后再merge起来第一部份, 先把ok/ng转换成1/0,逐row加起来(ok_cnt),每组product,sku依ok_cnt大至小排序, date早到晚排序, 再取出每组第一个row, 就会是所求的date第二部分, 每组product, sku找出max(result1)到max(result4)最后用product,sku作为key去merge两个部分, 应该就是你要的结果, btw我前面的date排序好像讲反了
作者: andrew43 (讨厌有好心推文后删文者)   2022-11-23 11:02:00
参考 data.table,也一并说明做法了。https://ideone.com/I1R28G
作者: hohiyan (海洋)   2022-11-25 11:18:00
既然 日期时间(Date) 这个字段都是采最新的一笔资料那用 排序 + group + long/wide date 应该就可以解决了https://pastebin.com/qHCdLGpQ

Links booklink

Contact Us: admin [ a t ] ucptt.com