gpt4 book ai didi

r - 从数据框中子集特定行和最后一行

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

我有一个数据框,其中包含与一系列不同事件相关的数据。一场比赛可以有多个得分事件。我想做的是对分数高于 5 或​​低于 -5 的情况进行子集化。我还想获取每个 ID 的最后一行。因此,对于每个 ID,我都会有一行或多行,具体取决于分数是高于 5 还是低于 -5。我的实际数据集包含许多其他信息列,但如果我学会了如何执行此操作,那么我将能够将它应用到我可能想做的任何其他事情中。

这是一个数据集

ID Score Time
1 0 0
1 3 5
1 -2 9
1 -4 17
1 -7 31
1 -1 43
2 0 0
2 -3 15
2 0 19
2 4 25
2 6 29
2 9 33
2 3 37
3 0 0
3 5 3
3 2 11

所以对于这个数据集,我希望得到这个输出:

ID Score Time
1 -7 31
1 -1 43
2 6 29
2 9 33
2 3 37
3 2 11

因此,至少对于每个 ID,无论事件期间分数是高于 5 还是低于 -5,都会打印一行该 ID 的最后分数(这发生在 ID 3 上)。

我的尝试可以在值高于 5 或​​低于 -5 时进行子集化,我只是不知道如何编写代码来获取每个 ID 的最后一行:

Data[Data$Score > 5 | Data$Score < -5]

如果您需要更多信息,请告诉我。

最佳答案

您可以使用 rle 获取每个 ID 的最后一行。查看 ?rle 了解有关此有用功能的更多信息。

Data2 <- Data[cumsum(rle(Data$ID)$lengths), ]
Data2
# ID Score Time
#6 1 -1 43
#13 2 3 37
#16 3 2 11

要结合这两个条件,请使用 rbind

Data2 <- rbind(Data[Data$Score > 5 | Data$Score < -5, ], Data[cumsum(rle(Data$ID)$lengths), ])

要删除同时满足这两个条件的行,您可以使用duplicatedrownames

Data2 <- Data2[!duplicated(rownames(Data2)), ]

当然,您也可以根据需要进行排序。

关于r - 从数据框中子集特定行和最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41883009/

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