R 在某些字段没有日期的情况下使用日期值的条件对数据框进行子集化

R subsetting a data frame with conditionsals on date values where some fields have no date

我有一个数据框:

'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 < lead_date.

如果我尝试按原样转换数据中的日期,而不删除 na 值,我会收到消息

Error in charToDate(x) : 
  character string is not in a standard unambiguous format

分析的目的是查看收到电子邮件对成为潜在客户的影响(因此 lead_date 将被填充,否则为 NA)。因此,我不想通过在完整的潜在客户日期对整个 df 进行子集化来排除那些从未成为潜在客户的人。

但我仍然想对那些有日期的记录进行计算,将 NA 作为它们自己的组。

这里有什么我可以做的吗?我希望 R 在使用子集或聚合等函数时忽略 NA 结果。我还想使用 as.Date()

将所有非 NA 日期转换为日期

** 发布后** 我可能可以用更简单的方式问这个问题:我可以将数据框中的字段转换为可行的日期,否则忽略 na 值吗?

as.Date( , format="%Y-%m-%d")

替换所有 as.Date( ) 电话
> as.Date(factor("0000-00-00 00:00:00"))
Error in charToDate(x) : 
  character string is not in a standard unambiguous format
> as.Date(factor("0000-00-00 00:00:00"), format="%Y-%m-%d")
[1] NA

然后描述您在更新数据集时遇到的问题(代码和错误)。无法根据描述预测您在后续步骤中会遇到什么困难。有一个 is.na 函数可以与其他逻辑测试结合使用。

请记住 is.na(NA) | NA 将 return 为真。这不适用于 & (AND) 但适用于 OR.