gpt4 book ai didi

r - 如何根据一组条件(包括自引用匹配)删除行对?

转载 作者:行者123 更新时间:2023-12-04 09:07:38 25 4
gpt4 key购买 nike

我正在处理处方药 claim 数据集。当 claim 被取消时,数据系统不仅会删除观察,还会创建一个具有相同处方编号但供应天数显示为负数的新观察。

例如

          DaysSupply RxNumber DateSupplied
1 -10 1 2018
2 10 1 2018

我想删除数据集的成对行,如果它们 1) 共享相同的处方编号 (RxNumber),2) 如果它们具有相同的处方日期 (DateSupplied),以及 3) 如果 DaysSupply 对应正值和负值(例如 +10 和 -10)。在这种情况下,处方编号是患者特定的 key 。

一个复杂的问题是可以从一个处方号兑换多个药物填充物,因此我想对符合上述条件的 JUST PAIRS 进行重复数据删除,而不是对共享相同处方号的所有行进行重复数据删除。

我不确定我应该采取什么方法。我考虑过使用长 if 语句/dedpulicate 命令,但我不确定如何指示 R 仅对符合上述条件的对进行重复数据删除。

v1 <- c(-10,10,10,-8,8,-6,6,5,4)
v2 <- c(1,1,1,2,2,3,4,9,9)
v3 <- c(2018, 2018, 2018, 2018, 2017, 2016, 2016, 2015, 2014)
df <- data.frame("DaysSupply" = v1, "RxNumber" = v2, "DateSupplied" = v3)

DaysSupply RxNumber DateSupplied
1 -10 1 2018
2 10 1 2018
3 10 1 2018
4 -8 2 2018
5 8 2 2017
6 -6 3 2016
7 6 4 2016
8 5 9 2015
9 4 9 2014

我想要的输出是:

  DaysSupply RxNumber DateSupplied
3 10 1 2018
4 -8 2 2018
5 8 2 2017
6 -6 3 2016
7 6 4 2016
8 5 9 2015
9 4 9 2014

有什么想法吗?

最佳答案

使用您的示例数据的 dplyr 解决方案。

我在末尾添加了一些行,以使其看起来更好,并使输出看起来与您的相同。我敢肯定有人可以剪掉一两行并使重复删除过程更清晰一些,但我让它做你需要的。

df %>% 
dplyr::mutate(AbsDaysSupply = abs(DaysSupply)) %>%
dplyr::group_by(RxNumber, DateSupplied, AbsDaysSupply) %>%
dplyr::arrange(RxNumber, DateSupplied, AbsDaysSupply, DaysSupply) %>%
dplyr::mutate(sum = cumsum(DaysSupply)) %>%
dplyr::filter(!(sum <= 0 & dplyr::n() > 1)) %>%
dplyr::ungroup() %>%
dplyr::select(-AbsDaysSupply, -sum) %>%
dplyr::arrange(desc(DateSupplied), RxNumber)
# A tibble: 7 x 3
DaysSupply RxNumber DateSupplied
<dbl> <dbl> <dbl>
1 10 1 2018
2 -8 2 2018
3 8 2 2017
4 -6 3 2016
5 6 4 2016
6 5 9 2015
7 4 9 2014

关于r - 如何根据一组条件(包括自引用匹配)删除行对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55956679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com