【问题标题】:Difference between two values for a specific value in another coloumn另一列中特定值的两个值之间的差异
【发布时间】:2018-02-19 09:44:31
【问题描述】:

我有一个表格,其中包含人员的个人资料 ID 和日期:他们最后一次访问在线个人资料的时间。

   Profile      Date      
     1108      2015-01-19        
     1108      2014-06-27     
     1108      2016-09-13
     1284      2015-03-04       
     1284      2015-06-21
     1641      2016-07-14

我想创建两个新变量:

  1. 显示“自他们第一次访问以来的天数”。所以基本上,当前日期减去访问的第一个日期(最早日期)。如果数据是配置文件的第一次访问,则天数应为 0。例如配置文件 ID 1108 的最早访问时间是 2014-06-27,因此新变量将为 0。第二次访问是在2015-01-19。因此,新变量将是 2015-01-19 和首次访问之间的天数。同样,对于第三次访问,新变量将具有第三次访问和第一次访问之间的天数

  2. 访问次数,即是第一次访问还是第二次访问。最早的日期将是第一次访问,下一个日期是第二个,依此类推。

结果表应如下所示:

   Profile      Date             Days           Vist_Count
     1108      2015-01-19        206                2
     1108      2014-06-27         0                 1
     1108      2016-09-13        809                3
     1284      2015-03-04         0                 1
     1284      2015-06-21        109                2
     1641      2016-07-14         0                 1

我希望我对这个问题很清楚。非常感谢! 瓦西克

【问题讨论】:

    标签: r date dataframe


    【解决方案1】:

    我们按'Profile'分组,得到'Date'与'Date'的min的差异来创建'Days'列,而'Visit_Count'是通过取'Date'的rank来创建的

    library(data.table)
    setDT(df1)[, `:=`(Days = Date - min(Date), Visit_Count = rank(Date)), Profile]
    df1
    #   Profile       Date     Days Visit_Count
    #1:    1108 2015-01-19 206 days           2
    #2:    1108 2014-06-27   0 days           1
    #3:    1108 2016-09-13 809 days           3
    #4:    1284 2015-03-04   0 days           1
    #5:    1284 2015-06-21 109 days           2
    #6:    1641 2016-07-14   0 days           1
    

    或使用tidyverse

    library(dplyr)
    df1 %>%
        group_by(Profile) %>%
        mutate(Days = Date - min(Date), Visit_Count = rank(Date))
    

    数据

    df1 <- structure(list(Profile = c(1108L, 1108L, 1108L, 1284L, 1284L, 
    1641L), Date = structure(c(16454, 16248, 17057, 16498, 16607, 
    16996), class = "Date")), .Names = c("Profile", "Date"), row.names = c(NA, 
    -6L), class = "data.frame")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2021-05-14
      相关资源
      最近更新 更多