如何修复R中的行引用
我需要按客户计算从每个发行日起的最后180天内发生的付款的平均值。使用“for”循环在我的完整数据集中(570.000行)花费了很多时间。 我尝试了其他函数,但结果总是数据集反满列的平均值。我不知道如何修复行引用,以获得每行在取消发行日之前发生的所有付款 请参阅我使用的dataset和函数。 提前谢谢 数据集:如何修复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
'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天内发生的
李>延迟付款
- 最后,我们可以根据
和客户
对_进行分组,以计算平均值李>发行日期
- 我们现在只筛选出自发行日期起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天内发生的
李>延迟付款
- 最后,我们可以根据
和客户
对_进行分组,以计算平均值李>发行日期
- 我们现在只筛选出自发行日期起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))