【发布时间】:2015-03-23 17:18:26
【问题描述】:
我有一个数据框:
'data.frame': 2611029 obs. of 10 variables:
$ eid : int 28 28 28 28 28 36 36 36 36 37 ...
$ created : Factor w/ 36204 levels "0000-00-00 00:00:00",..: NA NA NA NA NA NA NA NA NA NA ...
$ class_id : int NA NA NA NA NA NA NA NA NA NA ...
$ min.e.event_time.: Factor w/ 16175 levels "2013-04-15 11:17:19",..: NA NA NA NA NA NA NA NA NA NA ...
$ lead_date : Factor w/ 11199 levels "2012-10-11 18:39:12",..: NA NA NA NA NA NA NA NA NA NA ...
$ camp : int 44698 44698 44699 44701 44701 44715 44715 44909 44909 44699 ...
$ event_date : Factor w/ 695747 levels "2008-01-18 12:18:01",..: 1 5 2 32 36 6 17039 23 24 2 ...
$ event : Factor w/ 3 levels "click","open",..: 3 2 3 3 2 3 2 3 2 3 ...
$ message_name : Factor w/ 2707 levels ""," 2015-03 CAD Promotion Update",..: 2163 2163 2163 1106 1106 2163 2163 1990 1990 2163 ...
$ subject_lin : Factor w/ 2043 levels ""," Christie Office Holiday Hours",..: 613 613 613 248 248 613 613 612 612 613 ...
每个订单项都是一个用户 (eid) 已收到电子邮件 (event_date) 的实例。
event_date、lead_date 和 created 都是日期。到现在为止,我已经使用 as.Date() 在对数据进行子集化之后转换了这些日期,因此只有这些日期的 complete.cases() 记录。这使我可以进行基于聚合和子集的条件,例如其中 event_date 如果我尝试按原样转换数据中的日期,而不删除 na 值,我会收到消息 分析的目的是查看接收电子邮件对成为潜在客户的影响(因此将填充lead_date,否则为NA)。因此,我不想通过在完整的潜在客户日期对整个 df 进行子集化来排除从未成为潜在客户的人。 但我仍然想对那些带有日期的记录进行计算,将 NA 作为自己的组。 有什么我可以在这里做的吗?我希望 R 在使用子集或聚合等函数时忽略 NA 结果。我还想使用 as.Date() 将所有非 NA 日期转换为日期 ** 发布后**
我可能可以用更简单的方式问这个问题:我可以将数据框中的字段转换为可行的日期,否则忽略 na 值吗?Error in charToDate(x) :
character string is not in a standard unambiguous format
【问题讨论】:
-
你好@akrun。我现在正在查看它,并且在 ?as.Date。我很难理解如何处理 R 文档,并且发现我很少知道下一步该做什么。事实上,每当我阅读 R 文档时,我通常会比打开它之前更加困惑。有没有我可以传入 as.Date() 的参数,上面写着“忽略 NAs”?
-
我不确定这是否与
NA有关。否则,v1 <- c('2008-01-01', '2009-05-02', NA); as.Date(v1) #[1] "2008-01-01" "2009-05-02" NA应该显示错误。但是,这确实需要 NA 并为那些 NA 的元素提供 NA -
另外,正如我之前提到的,最好使用
dput显示几行数据。 -
您的因子水平之一是“0000-00-00 00:00:00”。当我尝试使用
as.Date.factor时,该值会导致您看到的错误。试试as.Date(factor("0000-00-00 00:00:00"))。您可能需要先将这些项目设置为 NA。没有年份 == 0000。(可以说这应该是自动发生的,但如果您确实向 NA 提供格式字符串强制转换确实会发生。)