r - 如何计算R中每个唯一id的日期之间的差异

标签 r

我是 R 新手,拥有以下用户名数据及其产品使用日期(截断输出):

Name,  Date 
Jane,  01-24-2016 10:02:00
Mary,  01-01-2016 12:18:00
Mary,  01-01-2016 13:18:00
Mary,  01-02-2016 13:18:00
Jane,  01-23-2016 10:02:00

我想对日期之间的差异进行一些分析,特别是每个用户使用之间的天数。我想绘制一个直方图来确定用户之间是否存在模式。

  1. 如何计算 R 中每个用户的日期之间的差异?
  2. 除了直方图之外,我还应该探索其他可视化效果吗?

谢谢

最佳答案

试试这个,假设你的数据框是df:

## in case you have different column names
colnames(df) <- c("Name", "Date")

## you might also have Date as factors when reading in data
## the following ensures it is character string
df$Date <- as.character(df$Date)

## convert to Date object
## see ?strptime for various available format
## see ?as.Date for Date object
df$Date <- as.Date(df$Date, format = "%m-%d-%Y %H:%M:%S")

## reorder, so that date are ascending (see Jane)
## this is necessary, otherwise negative number occur after differencing
## see ?order on ordering
df <- df[order(df$Name, df$Date), ]

## take day lags per person
## see ?diff for taking difference
## see ?tapply for applying FUN on grouped data
## as.integer() makes output clean
## if unsure, compare with: lags <- with(df, tapply(Date, Name, FUN = diff))
lags <- with(df, tapply(Date, Name, FUN = function (x) as.integer(diff(x))))

对于你截断的数据(5行),我得到:

> lags
$Jane
[1] 1

$Mary
[1] 0 1

lags 是一个列表。如果您想获取 Jane 的信息,请执行lags$Jane。要获取直方图,请执行 hist(lags$Jane)。此外,如果您想简单地为所有客户端生成直方图,忽略个体差异,请使用hist(unlist(lags))unlist() 将列表折叠为单个向量。


评论:

  1. 关于您对 R 的良好引用的要求,请参阅 CRAN: R introadvanced R ;
  2. 对多个索引使用tapply?也许你可以尝试我给出的技巧,使用 paste 首先构造一个辅助索引;
  3. 呃,看起来我很快就通过使用密度和中心极限定理等来使事情变得比必要的复杂,以进行可视化。所以我删除了我的其他答案。

关于r - 如何计算R中每个唯一id的日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473306/

相关文章:

r - 如何使用geom_errorbar在堆叠条形图中堆叠误差条?

r - 如何绘制滞后时间序列?

r - 比较r中四个ROC曲线的auc

R-连分数

r - 过滤器在 dplyr 中无法正常工作(找不到对象)

r - 如何在给定格子条件的情况下绘制叠加多个时间序列?

r - 在多个条件下使用 dplyr filter() 进行过滤

r - 导入单元格而不会从xlsx中删除

r - 在箱线图中绘制空组

r - R : color scale in logarithmic base 中的 Hexbin