Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复R中的行引用_R_Performance_Reference_Row_Mean - Fatal编程技术网

如何修复R中的行引用

如何修复R中的行引用,r,performance,reference,row,mean,R,Performance,Reference,Row,Mean,我需要按客户计算从每个发行日起的最后180天内发生的付款的平均值。使用“for”循环在我的完整数据集中(570.000行)花费了很多时间。 我尝试了其他函数,但结果总是数据集反满列的平均值。我不知道如何修复行引用,以获得每行在取消发行日之前发生的所有付款 请参阅我使用的dataset和函数。 提前谢谢 数据集: 'ds<-data.frame( issue_date=as.Date(c("2018-03-17","2018-03-17","2018-03-17","2018-06-21

我需要按客户计算从每个发行日起的最后180天内发生的付款的平均值。使用“for”循环在我的完整数据集中(570.000行)花费了很多时间。 我尝试了其他函数,但结果总是数据集反满列的平均值。我不知道如何修复行引用,以获得每行在取消发行日之前发生的所有付款

请参阅我使用的dataset和函数。 提前谢谢

数据集:

'ds<-data.frame(
  issue_date=as.Date(c("2018-03-17","2018-03-17","2018-03-17","2018-06-21","2018-06-21",
               "2019-10-03","2019-10-03","2019-03-02","2018-08-22","2018-06-21",
               "2018-08-22","2019-03-02","2019-06-08","2018-08-22","2018-12-11",
               "2019-03-02","2019-06-08","2018-12-11","2018-12-11","2017-12-13",
               "2017-12-13","2017-12-13","2018-04-19","2018-08-21","2019-01-09",
               "2019-07-24","2019-07-24","2019-10-10","2019-05-14")),
  due_date=as.Date(c("2018-04-14","2018-06-09","2018-05-12","2018-07-19","2018-09-13",
             "2019-10-31","2019-11-28","2019-05-25","2018-10-17","2018-08-16",
             "2018-09-19","2019-04-27","2019-07-06","2018-11-14","2019-02-05",
             "2019-03-30","2019-08-03","2019-03-05","2019-01-08","2018-01-10",
             "2018-03-07","2018-02-07","2018-05-03","2018-09-04","2019-01-29",
             "2019-09-11","2019-08-28","2019-10-30","2019-06-01")),
  customer=c(59570867,59570867,59570867,59570867,59570867,59570867,
                          59570867,59570867,59570867,59570867,59570867,59570867,
                          59570867,59570867,59570867,59570867,59570867,59570867,
                          59570867,59570867,59570867,59570867,13389815,13389815,
                          13389815,13389815,13389815,13389815,13389815),
  late_payment=c(2,1,4,2,3,1,2,5,8,3,2,4,3,2,6,5,2,1,3,5,2,1,3,4,5,1,4,2,2)
)'

您的数据格式似乎不太适合轻松进行分析。然而,我想出了一个变通办法,让你做你想做的事。我将在这里介绍解决方案,然后简要讨论不同的操作

ds %>% 
  group_by(customer) %>% 
  tidyr::complete(customer, issue_date, due_date) %>% 
  arrange(due_date) %>% 
  group_by(due_date) %>%
  tidyr::fill(late_payment, .direction = "down") %>% 
  filter(due_date >= issue_date - 180 & due_date < issue_date) %>% 
  group_by(customer, issue_date) %>% 
  summarise(mean(late_payment))
ds%>%
分组依据(客户)%>%
三年:完成(客户、发行日期、到期日期)%>%
安排(到期日)%>%
分组人(截止日期)%>%
tidyr::填写(逾期付款,.direction=“down”)%>%
过滤器(到期日>=发行日-180&到期日<发行日)%>%
分组依据(客户、发行日期)%>%
总结(平均值(逾期付款))
  • 首先,我们对每个客户的数据进行分组,这样我们就可以为
    发行日期
    到期日期
    的客户创建所有可能的组合。请注意,此步骤在计算上可能会很昂贵
  • 然后,我们根据
    到期日
    对这些组合重新排序。您可以单独执行管道的每个步骤,以研究其对提供的示例的影响
  • 排序后,可以使用根据
    到期日找到的第一个非
    NA
    值填写
    延迟付款
    (因此也可以按进行分组)。i、 e.原始数据中发现的
    发行日期/到期日期
    组合的
    延迟付款
  • 我们现在只筛选出自发行日期起180天内发生的
    延迟付款
  • 最后,我们可以根据
    客户
    发行日期
    对_进行分组,以计算平均值
您的数据格式似乎不太适合轻松进行分析。然而,我想出了一个变通办法,让你做你想做的事。我将在这里介绍解决方案,然后简要讨论不同的操作

ds %>% 
  group_by(customer) %>% 
  tidyr::complete(customer, issue_date, due_date) %>% 
  arrange(due_date) %>% 
  group_by(due_date) %>%
  tidyr::fill(late_payment, .direction = "down") %>% 
  filter(due_date >= issue_date - 180 & due_date < issue_date) %>% 
  group_by(customer, issue_date) %>% 
  summarise(mean(late_payment))
ds%>%
分组依据(客户)%>%
三年:完成(客户、发行日期、到期日期)%>%
安排(到期日)%>%
分组人(截止日期)%>%
tidyr::填写(逾期付款,.direction=“down”)%>%
过滤器(到期日>=发行日-180&到期日<发行日)%>%
分组依据(客户、发行日期)%>%
总结(平均值(逾期付款))
  • 首先,我们对每个客户的数据进行分组,这样我们就可以为
    发行日期
    到期日期
    的客户创建所有可能的组合。请注意,此步骤在计算上可能会很昂贵
  • 然后,我们根据
    到期日
    对这些组合重新排序。您可以单独执行管道的每个步骤,以研究其对提供的示例的影响
  • 排序后,可以使用根据
    到期日找到的第一个非
    NA
    值填写
    延迟付款
    (因此也可以按进行分组)。i、 e.原始数据中发现的
    发行日期/到期日期
    组合的
    延迟付款
  • 我们现在只筛选出自发行日期起180天内发生的
    延迟付款
  • 最后,我们可以根据
    客户
    发行日期
    对_进行分组,以计算平均值
Jeroen,感谢您的贡献。我的正确问题更像是:过去180天的付款“平均”是多少?我测试了你的建议,但它导致了“NaN”,就像我尝试的“聚合”一样。这是因为你的数据(至少上面提供的样本)不包含在发行日期前180天内发生的延迟付款(即到期日)。我似乎忽略了一些逻辑?你能重新表述一下你分析的目标吗?再次感谢你的回复。我试图通过使用预测性机器学习模型来防止财务违约。“延迟付款”的平均值是预测模型的de属性之一。在上述样本中,第27行,发布日期2019-10-10,该客户在过去180天内(2019-09-11、2019-08-28、2019-06-01)有3次付款,分别延迟付款1,4和2天,因此平均延迟付款2,33天。我使用带有循环“for”(如上)的代码得到结果,但处理过程需要很多时间(对于这570.000行信息,需要3.5小时)。我使用的另一种解决方案是,将数据集划分为12个子集,然后逐个处理。这样,总共需要25分钟来处理这12个子集(每个子集大约2分钟)。也许第一个问题是:为什么要花3,5个小时来处理完整的数据集,所有的570.000行?随着数据的增加,处理时间似乎呈指数级增长。Jeroen,感谢您的贡献。我的正确问题更像是:过去180天的付款“平均”是多少?我测试了你的建议,但它导致了“NaN”,就像我尝试的“聚合”一样。这是因为你的数据(至少上面提供的样本)不包含在发行日期前180天内发生的延迟付款(即到期日)。我似乎忽略了一些逻辑?你能重新表述一下你分析的目标吗?再次感谢你的回复。我试图通过使用预测性机器学习模型来防止财务违约。“延迟付款”的平均值是预测模型的de属性之一。在上述样本中,第27行,发布日期2019-10-10,该客户在过去180天内(2019-09-11、2019-08-28、2019-06-01)有3次付款,分别延迟付款1,4和2天,因此平均延迟付款2,33天。我使用带有循环“for”(如上)的代码获得结果,但它需要大量的处理时间(3)
ds %>% 
  group_by(customer) %>% 
  tidyr::complete(customer, issue_date, due_date) %>% 
  arrange(due_date) %>% 
  group_by(due_date) %>%
  tidyr::fill(late_payment, .direction = "down") %>% 
  filter(due_date >= issue_date - 180 & due_date < issue_date) %>% 
  group_by(customer, issue_date) %>% 
  summarise(mean(late_payment))