gpt4 book ai didi

r - 如何在R中根据条件压缩/删除行?

转载 作者:行者123 更新时间:2023-12-02 02:00:47 25 4
gpt4 key购买 nike

我有一个数据框,请参阅下面。如何在某些条件下压缩/删除行?我想仅在 V1 中有连续 1 时选择最高音量

例如:df[2:5,]V1全部等于1,其中最高的Volume是df[4,] 因此删除 df[c(2,3,5),] ,对于 df[9:10,] ,最高音量这两个是 df[10,] ,删除 df[9,].....依此类推......结果将像 示例图片,其中 V1 将类似于 0101010101....

如何在不使用循环的情况下实现这一目标,如何以矢量化方式实现这一目标,以便计算速度更快(处理数百万行时)?

更新:我使用 V2 应用相同的循环,但仅在 Volume 较小​​时删除,这就是示例图片中第 13 行被删除的原因,因为第 13 行的 Volume 小于第 14 行的 Volume。

更新(另一个问题):我尝试过akrun的方法,我从组中选择最大的Volume,但是当有两个或多个最大值时,仍然会出现连续的1,如下所示第 9 行。如何删除重复的行?我可以使用 duplicate(df$Volume) ,还有其他方法吗?谢谢

更新:跟进 akrun 的尝试,代码将删除 V1==0 的行,这不是我想要的,我只想在 V1==1 时删除> 并且音量小于该组的最大音量。我知道V1中会有一些连续的0,并且删除V1中重复的0将取决于Weight,所以这就是我需要的原因只能删除V1==1,不能删除V1==0

#   Volume Weight V1 V2
#1 0.5367 0.5367 0 1
#4 1.1457 1.1413 1 0
#6 0.5694 0.5633 0 1
#7 1.2368 1.2343 1 0
#8 0.9662 0.9593 0 1
#9 1.4102 1.3923 1 0
#10 1.4102 1.3995 1 0
#11 1.1132 1.1069 0 1
#12 1.4535 1.3923 1 0
#14 1.1475 1.1447 0 1
#15 1.1790 1.1748 1 0
#18 1.1557 1.1552 0 1

数据框 df

    Volume Weight V1 V2 
1: 0.5367 0.5367 0 1
2: 0.8645 0.8508 1 0
3: 0.8590 0.8585 1 0
4: 1.1457 1.1413 1 0
5: 0.8573 0.8568 1 0
6: 0.5694 0.5633 0 1
7: 1.2368 1.2343 1 0
8: 0.9662 0.9593 0 1
9: 1.3550 1.3412 1 0
10: 1.4102 1.3995 1 0
11: 1.1132 1.1069 0 1
12: 1.4535 1.3923 1 0
13: 1.0437 1.0344 0 1
14: 1.1475 1.1447 0 1
15: 1.1790 1.1748 1 0
16: 1.1749 1.1735 1 0
17: 1.1749 1.1731 1 0
18: 1.1557 1.1552 0 1

示例图片

    Volume Weight V1 V2 
1: 0.5367 0.5367 0 1
4: 1.1457 1.1413 1 0
6: 0.5694 0.5633 0 1
7: 1.2368 1.2343 1 0
8: 0.9662 0.9593 0 1
10: 1.4102 1.3995 1 0
11: 1.1132 1.1069 0 1
12: 1.4535 1.3923 1 0
14: 1.1475 1.1447 0 1
15: 1.1790 1.1748 1 0
18: 1.1557 1.1552 0 1

最佳答案

您可以使用library(data.table):

setDT(df)[, .SD[(Volume == max(Volume) & V1 == 1) | V1 != 0], by = rleid(df$V1)][]

编辑:

关于掉列问题,来自akrun的改编技巧:

setDT(df)[df[, .I[(Volume == max(Volume) & V1 == 1) | V1 == 0], rleid(V1)]$V1][]

关于r - 如何在R中根据条件压缩/删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44155199/

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