【问题标题】:Is there a way to locate AND remove the odd rows, of grouped IDs within R?有没有办法找到并删除 R 中分组 ID 的奇数行?
【发布时间】:2020-01-02 17:54:00
【问题描述】:

我有一个包含 10,555 行的数据集。在这个数据集中,我有许多分组的 ID。我只想要偶数个分组 ID,同时保留第一组的第一行。

有没有办法找到并删除每组 ID 中最后的所有奇数行? 此外,有没有办法对所有这些被删除的奇数行进行分组?

我试过这个:

数据

我没有得到想要的结果。

样本数据集:

                    ID                       TIME

                    AAA                      12/18/2019 1:37:12 AM 
                    AAA                      12/18/2019 1:37:13 AM
                    AAA                      12/18/2019 1:37:14 AM
                    BBB                      12/18/2019 1:37:16 AM
                    BBB                      12/18/2019 1:37:17 AM
                    BBB                      12/18/2019 1:37:19 AM

期望的结果:

                    ID                       TIME

                    AAA                      12/18/2019 1:37:12 AM 
                    AAA                      12/18/2019 1:37:13 AM
                    BBB                      12/18/2019 1:37:16 AM
                    BBB                      12/18/2019 1:37:17 AM

移除奇数行: AAA 2019 年 12 月 18 日凌晨 1 点 37 分 14 秒 BBB 2019 年 12 月 18 日上午 1:37:19

任何帮助都会有所帮助。我还在研究这个。谢谢

【问题讨论】:

  • 在这里,您要删除每个 ID 的最后一行? data %>% group_by(ID) %>% slice(-n())
  • 你如何定义奇数?对我来说,每个“ID”的行号 1、3、5,... 都是奇数,但在您的预期中,您不会删除第一个
  • 是的,你是对的。我很抱歉。我想知道是否可以在 R 中找到并删除每个分组 ID 中的最后一个奇数行。我正在计算持续时间,我想保留第一个值。最后被丢弃的奇数行将包含在以后分析的计算中。
  • 在这种情况下,我发布的解决方案应该可以工作
  • 是的,我现在正在尝试。谢谢你

标签: r dplyr


【解决方案1】:

如果我们想为每个'ID'保留偶数行,在进行分组后,在slice中创建一个条件以返回偶数行

library(dplyr)
data1 <- data %>%
           group_by(ID) %>%
           slice(if(n()%% 2 == 0) row_number() else seq_len(n()-1))

然后获取所有剩余的行

anti_join(data, data1)

【讨论】:

  • 你好,这个命令是否会在这个大数据集中找到奇数行然后删除?我现在就试试这个。非常感谢
  • @TanishaHudson 您的示例和预期输出似乎令人困惑。如果要删除奇数行,我不明白为什么不删除第一行
  • 我很抱歉。我会澄清的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
相关资源
最近更新 更多