【问题标题】:find similar row index in 2 dataframe in R在 R 的 2 个数据框中找到相似的行索引
【发布时间】:2022-01-17 03:39:08
【问题描述】:

这是我的测试数据集:

test
        date app count
1 21-10-18   A     2
2 21-10-19   A     3
3 21-10-23   A     5
4 21-10-19   B     2
5 21-10-24   B     3

我想根据应用列对数据进行分组,并将日期列中的最新日期替换为sys.Date。 我可以通过以下方式获取每个应用的最新日期:

latest_date <- test %>% group_by(app)%>%slice(n())

latest_date 
# A tibble: 2 x 3
# Groups:   app [2]
  date       app   count
  <date>     <chr> <int>
1 21-10-23 A         5
2 21-10-24 B         3

如何在 test 数据集中找到与 latest_date 中的行匹配的行索引? (which (test == latest_date)) ????

最后我需要的是:

        date app count
1 21-10-18   A     2
2 21-10-19   A     3
3 21-12-13   A     5
4 21-10-19   B     2
5 21-12-13   B     3

还有如何在max.date 之后添加当前日期的行 每个组的输出看起来:

           date app count
    1 21-10-18   A     2
    2 21-10-19   A     3
    3 21-10-23   A     5
    4 21-12-13   A     5
    5 21-10-19   B     2
    6 21-10-24   B     3
    7 21-12-13   B     3

来自dplyradd_row 命令不适用于分组数据帧!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    通过“app”分组后使用replace

    library(dplyr)
    library(lubridate)
    test %>% 
       mutate(date = ymd(date)) %>%
       group_by(app) %>% 
       mutate(date = replace(date, which.max(date), Sys.Date())) %>%
       ungroup
    

    -输出

    # A tibble: 5 × 3
      date       app   count
      <date>     <chr> <int>
    1 2021-10-18 A         2
    2 2021-10-19 A         3
    3 2021-12-13 A         5
    4 2021-10-19 B         2
    5 2021-12-13 B         3
    

    更新后的帖子 - 使用 add_rowgroup_modify

    library(tidyr)
    test %>%
       mutate(date = ymd(date)) %>%
       group_by(app) %>% 
       group_modify(~ add_row(.x, date = Sys.Date())) %>%
       fill(count) %>%
       ungroup
    

    -输出

    # A tibble: 7 × 3
      app   date       count
      <chr> <date>     <int>
    1 A     2021-10-18     2
    2 A     2021-10-19     3
    3 A     2021-10-23     5
    4 A     2021-12-13     5
    5 B     2021-10-19     2
    6 B     2021-10-24     3
    7 B     2021-12-13     3
    

    数据

    test <- structure(list(date = c("21-10-18", "21-10-19", "21-10-23", "21-10-19", 
    "21-10-24"), app = c("A", "A", "A", "B", "B"), count = c(2L, 
    3L, 5L, 2L, 3L)), class = "data.frame", row.names = c("1", "2", 
    "3", "4", "5"))
    

    【讨论】:

    • 感谢您的回复。如果我想按照问题中的说明插入新行?
    • @user9112767 我检查了您的预期输出,它似乎没有更多行
    • @user9112767 不是替换,而是添加一个新行?
    • 正确,因为它现在在问题中
    • 完美,谢谢 :)
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2018-05-14
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多