【问题标题】:Creating a visit column based on a site ID and a date根据站点 ID 和日期创建访问列
【发布时间】:2020-04-29 20:55:18
【问题描述】:

我有一个数据集,其中包含多次访问的唯一网站。我有一个站点 ID 列和一个日期列。我想在每个唯一的站点 ID 中生成一个访问列,该列为第一个日期分配 1,为第二个日期分配 2,等等......每次访问网站时。这是我的输入数据的样子:

 df<- data.frame(id = c("A, "A, "A, "B", "B", "B", "C"),
         date = c("05-01-2012", "05-12-2012", "05-20-2012", "05-01-2012", "05-01-2012", 
                  "05-11- 2012", "05-07-2012"))

    id date
    A  05-01-2012
    A  05-12-2012
    A  05-20-2012
    B  05-01-2012
    B  05-01-2012
    B  05-11-2012
    C  05-07-2012

这是我想要生成的:

    id date       visit
    A  05-01-2012 1
    A  05-12-2012 2
    A  05-20-2012 3
    B  05-01-2012 1
    B  05-01-2012 1
    B  05-11-2012 2
    C  05-07-2012 1

我已经尝试过df_%&gt;% group_by(id) %&gt;%summarise(visit=(setDT(df)[, visit := .GRP, by = date])),但它为每个日期分配了一个唯一的访问值,但不在一个 ID 内,所以我的访问值只是不断攀升,而不是为每个新 ID 从 1 重新开始。

感谢您的帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以使用match 创建列,而不是summarise 而是mutatesummarise 期望输出为每组返回一行

    library(dplyr)
    df %>%
       group_by(id) %>%
       mutate(visit = match(date, unique(date)))
    # A tibble: 7 x 3
    # Groups:   id [3]
    #  id    date       visit
    #  <fct> <fct>      <int>
    #1 A     05-01-2012     1
    #2 A     05-12-2012     2
    #3 A     05-20-2012     3
    #4 B     05-01-2012     1
    #5 B     05-01-2012     1
    #6 B     05-11-2012     2
    #7 C     05-07-2012     1
    

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 2018-02-03
      • 2016-05-28
      • 2019-05-30
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多