【发布时间】:2016-08-30 07:22:01
【问题描述】:
假设我有以下数据框表示用户在各个公司注册应用程序的日期:
df <- data.frame(user = c("Tia", "Sam", "Matt", "Brandy", "Joe", "Nariko"),
company = c("Intel", "Intel", "Nvidia", "Nvidia", "Nvidia", "Google"),
registrationDate = as.Date(c("2015-01-04", "2015-01-04", "2015-01-19",
"2015-01-20", "2015-01-20", "2015-01-25")),
stringsAsFactors = FALSE)
如何创建一个向量,让我知道每家公司的用户注册应用程序的平均时间差?
我在获取公司对日期变量的简单汇总统计数据时遇到了一些麻烦。例如,当我尝试使用 dplyr 查找每个公司的最长注册日期时:
library(dplyr)
df %>%
group_by(company) %>%
mutate(maxDate = max(registrationDate))
我获得了为数据框中的每一行复制的整个 registrationDate 向量的最大日期。就好像 max() 函数忽略了 dplyr 的管道。
【问题讨论】:
-
您能否显示预期的输出,因为从您的描述和代码中不清楚。是
df %>% group_by(company) %>% mutate(AvgTime = mean(diff(registrationDate))) -
抱歉,不清楚。我想要最大时差除以每家公司的用户数。类似 (difftime(max(df$registrationDate), min(df$registrationDate)))/num_users
-
@akrun 出于某种原因,您的 mutate 函数的结果将每个公司的 avgTime 计算为 4.2。但是,假设我们首先使用
df2 <- filter(df, company == "Nvidia")过滤 df,然后在 df2 上再次运行您的代码,我们会发现 avgTime 现在是 0.5 -
也许是
df %>% group_by(company) %>% mutate(new = max(diff(registrationDate))/ length(unique(user)))