【问题标题】:Filtering data based on date and account number in R在R中根据日期和帐号过滤数据
【发布时间】:2018-07-27 06:02:27
【问题描述】:

我的数据集包含列 - 报告日期、标志 1 和 0 以及帐号。

因此,对于一个帐户,我们有多个报告日期,从 2001 年 1 月到 2008 年 12 月。

标志的值为 1 和 0。

我的要求是确定标志变为 1 的月份并获取最近 12 个月的数据。

例如,如果 flag 在 2008 年 12 月变为 1,那么我们应该获取该帐户从 2008 年 1 月到 2008 年 12 月的数据。

我尝试重塑并设法拉出默认日期,但现在我只需要获取最近 12 个月的数据。

我正在尝试在 R 中执行此操作。请有任何建议。

【问题讨论】:

标签: r


【解决方案1】:

您可以apply 您提到的条件来创建data.framelist,然后相应地处理它们。见下文:

library(lubridate)

# data simulation
set.seed(123)
dates <- seq(dmy("01-01-2001"), to = dmy("31-12-2008"), by = 1)
df <- data.frame(
  rep_date = sample(dates, 5000, replace = TRUE),
  flag = sample(c(FALSE, TRUE), 5000, replace = TRUE),
  acc_num = sample(100:999, 5000, replace = TRUE)
)

# simulated data
head(df)
#     rep_date  flag acc_num
# 1 2006-02-04  TRUE     553
# 2 2001-09-27 FALSE     896
# 3 2007-05-05 FALSE     946
# 4 2008-07-16 FALSE     823
# 5 2003-06-04  TRUE     694
# 6 2005-07-04 FALSE     395


# list of data.frame
df_list <- apply(df[df$flag, ], 1, function(x) {
  r_date <- as_date(x[1])
  r_acc_num <- as.integer(x[3])
  df[df$rep_date <= r_date & df$rep_date >= (r_date - 365) & df$acc_num == r_acc_num, ]
})        

# result for Case 1000
df_list[[1000]]
#       rep_date   flag   acc_num
# 2010 2005-01-24  TRUE     199
# 3229 2004-12-18 FALSE     199
# 4790 2004-08-06  TRUE     199

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多