【问题标题】:R extract rows with same ID that are most freqent per dayR提取每天最频繁的具有相同ID的行
【发布时间】:2023-03-07 15:51:02
【问题描述】:

我的数据集相当大,但如下所示:

PData <- 

    ID      Date        Time    OBJ     Loc Condition  Color
    ID21    12/20/2020  04:52   rack    A1  Good       Bright
    ID21    12/20/2020  04:52   desk    A3  Good       Bright
    ID5     12/20/2020  12:05   rack    A1  Partial    Dark
    ID5     12/20/2020  12:05   desk    A2  Partial    Dark
    ID3     12/21/2020  03:25   rack    A1  Partial    Bright
    ID3     12/21/2020  03:25   rack    A3  Partial    Bright
    ID3     12/21/2020  03:25   rack    A5  Partial    Bright
    ID3     12/21/2020  03:25   rack    A4  Partial    Bright
    ID3     12/21/2020  03:25   rack    A1  Partial    Bright
    ID3     12/21/2020  03:25   rack    A2  Partial    Bright
    ID12    12/21/2020  09:25   chair   A3  Good       Bright
    ID12    12/21/2020  09:25   computerA1  Good       Bright
    ID34    12/21/2020  16:35   rack    A1  Good       Bright
    ID34    12/21/2020  16:35   computerA2  Good       Bright
    ID34    12/21/2020  16:35   chair   A3  Good       Bright
    ID34    12/21/2020  16:35   desk    A4  Good       Bright
    ID33    12/21/2020  10:36   desk    A5  Good       Bright
    ID33    12/21/2020  10:36   desk    A2  Good       Bright
    ID33    12/21/2020  10:36   desk    A1  Good       Bright
    ID33    12/21/2020  10:36   desk    A3  Good       Bright
    ID33    12/21/2020  10:36   desk    A3  Good       Bright

我正在尝试根据各种条件进行过滤,然后提取每天最多条目的 ID。

 newDat <- PData %>%   group_by(Date,ID) %>%   filter(Condition == "Good", Color == "Bright") %>% add_count(ID)

到目前为止,我已经编写了以下代码,但我不知道如何提取具有每天最多条目的 ID 的行。

下面是我想要实现的一个示例。

ID      Date        Time    OBJ     Loc Condition  Color
ID21    12/20/2020  04:52   rack    A1  Good       Bright
ID21    12/20/2020  04:52   desk    A3  Good       Bright
ID33    12/21/2020  10:36   desk    A5  Good       Bright
ID33    12/21/2020  10:36   desk    A2  Good       Bright
ID33    12/21/2020  10:36   desk    A1  Good       Bright
ID33    12/21/2020  10:36   desk    A3  Good       Bright
ID33    12/21/2020  10:36   desk    A3  Good       Bright

任何帮助将不胜感激!

【问题讨论】:

    标签: r group-by filtering


    【解决方案1】:

    我们可以ungroup 并在“n”的max 上做一个filter

    library(dplyr)
    PData %>%
          group_by(Date,ID) %>% 
          filter(Condition == "Good", Color == "Bright") %>%
          add_count(ID) %>%         
          group_by(Date) %>%
          filter(n == max(n)) %>%
          ungroup %>%
          select(-n)
    

    -输出

    # A tibble: 7 x 7
    #  ID    Date       Time  OBJ   Loc   Condition Color 
    #  <chr> <chr>      <chr> <chr> <chr> <chr>     <chr> 
    #1 ID21  12/20/2020 04:52 rack  A1    Good      Bright
    #2 ID21  12/20/2020 04:52 desk  A3    Good      Bright
    #3 ID33  12/21/2020 10:36 desk  A5    Good      Bright
    #4 ID33  12/21/2020 10:36 desk  A2    Good      Bright
    #5 ID33  12/21/2020 10:36 desk  A1    Good      Bright
    #6 ID33  12/21/2020 10:36 desk  A3    Good      Bright
    #7 ID33  12/21/2020 10:36 desk  A3    Good      Bright
    

    数据

    PData <- structure(list(ID = c("ID21", "ID21", "ID5", "ID5", "ID3", "ID3", 
    "ID3", "ID3", "ID3", "ID3", "ID12", "ID12", "ID34", "ID34", "ID34", 
    "ID34", "ID33", "ID33", "ID33", "ID33", "ID33"), Date = c("12/20/2020", 
    "12/20/2020", "12/20/2020", "12/20/2020", "12/21/2020", "12/21/2020", 
    "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020", 
    "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020", 
    "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020", "12/21/2020"
    ), Time = c("04:52", "04:52", "12:05", "12:05", "03:25", "03:25", 
    "03:25", "03:25", "03:25", "03:25", "09:25", "09:25", "16:35", 
    "16:35", "16:35", "16:35", "10:36", "10:36", "10:36", "10:36", 
    "10:36"), OBJ = c("rack", "desk", "rack", "desk", "rack", "rack", 
    "rack", "rack", "rack", "rack", "chair", "computer", "rack", 
    "computer", "chair", "desk", "desk", "desk", "desk", "desk", 
    "desk"), Loc = c("A1", "A3", "A1", "A2", "A1", "A3", "A5", "A4", 
    "A1", "A2", "A3", "A1", "A1", "A2", "A3", "A4", "A5", "A2", "A1", 
    "A3", "A3"), Condition = c("Good", "Good", "Partial", "Partial", 
    "Partial", "Partial", "Partial", "Partial", "Partial", "Partial", 
    "Good", "Good", "Good", "Good", "Good", "Good", "Good", "Good", 
    "Good", "Good", "Good"), Color = c("Bright", "Bright", "Dark", 
    "Dark", "Bright", "Bright", "Bright", "Bright", "Bright", "Bright", 
    "Bright", "Bright", "Bright", "Bright", "Bright", "Bright", "Bright", 
    "Bright", "Bright", "Bright", "Bright")), class = "data.frame",
    row.names = c(NA, 
    -21L))
    

    【讨论】:

    • 有效,但只留下了具有最大计数的 ID。我需要每天的最大计数。因此,每一天都会有与当天条目最多的 ID 相关联的行。
    • @Erika 在这种情况下,只需将ungroup 替换为group_by(Date)。更新了帖子
    • @Erika 你现在可以检查输出了吗
    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2019-05-18
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多