Để thiết lập các hiệu ứng theo mùa về sử dụng năng lượng, tôi cần căn chỉnh thông tin sử dụng năng lượng mà tôi có từ cơ sở dữ liệu thanh toán với nhiệt độ hàng tháng.Chia chuỗi thời gian không thường xuyên thành trung bình hàng tháng - R
Tôi đang làm việc với tập dữ liệu thanh toán có hóa đơn có độ dài khác nhau và ngày bắt đầu và ngày kết thúc và tôi muốn nhận được mức trung bình hàng tháng cho mỗi tài khoản trong mỗi tháng. Ví dụ, tôi có một cơ sở dữ liệu thanh toán có các đặc điểm sau:
acct amount begin end days
1 2242 11349 2009-10-06 2009-11-04 29
2 2242 12252 2009-11-04 2009-12-04 30
3 2242 21774 2009-12-04 2010-01-08 35
4 2242 18293 2010-01-08 2010-02-05 28
5 2243 27217 2009-10-06 2009-11-04 29
6 2243 117 2009-11-04 2009-12-04 30
7 2243 14543 2009-12-04 2010-01-08 35
Tôi muốn tìm ra cách để ép buộc các chuỗi thời gian hơi bất thường (đối với mỗi tài khoản) để có được số tiền trung bình mỗi ngày trong mỗi tháng được kéo dài trong mỗi hóa đơn, chẳng hạn rằng:
acct amount begin end days avgamtpday
1 2242 11349 2009-10-01 2009-10-31 31 X
2 2242 12252 2009-11-01 2009-11-30 30 X
3 2242 21774 2009-12-01 2010-12-31 31 X
4 2242 18293 2010-01-01 2010-01-31 31 X
4 2242 18293 2010-02-01 2010-02-28 28 X
5 2243 27217 2009-10-01 2009-10-31 31 X
6 2243 117 2009-11-01 2009-11-30 30 X
7 2243 14543 2009-12-01 2009-12-31 30 X
7 2243 14543 2010-01-01 2010-01-31 31 X
tôi khá thuyết bất khả tri đến công cụ nào có thể làm được điều này, vì tôi chỉ phải làm điều này một lần.
Một nếp nhăn bổ sung là bảng dài khoảng 150.000 hàng, không thực sự lớn bằng hầu hết các tiêu chuẩn, nhưng đủ lớn để tạo ra giải pháp vòng lặp trong R khó khăn. Tôi đã điều tra bằng cách sử dụng các gói zoo, xts và tempdisagg trong R. Tôi bắt đầu viết một vòng lặp thực sự xấu xí để phân chia từng hóa đơn, sau đó tạo một hàng cho mỗi tháng trong một hóa đơn hiện có, và sau đó tapply() để tóm tắt và nhiều tháng, nhưng thành thật mà nói, không thể thấy làm thế nào để làm điều đó một cách hiệu quả.
Trong MySQL, tôi đã cố gắng này:
tạo hoặc thay thế xem v3 như chọn 1 n union all select 1 union all select 1;
tạo hoặc thay thế chế độ xem v khi chọn 1 n từ v3 a, v3 b union tất cả chọn 1;
đặt @n = 0;
bảng thả nếu có lịch; tạo lịch biểu (dt date primary key);
chèn vào lịch
chọn diễn viên ('2008-1-1' + khoảng thời gian @n: = @ n + 1 ngày làm ngày) dưới dạng dt từ v a, v b, v c, v d, v đ, v;chọn acct, số tiền, bắt đầu, kết thúc, billAmtPerDay, sum (billAmtPerDay), MonthAmt, count () Ngày, sum (billAmtPerDay)/count () AverageAmtPerDay, năm (dt), tháng (dt) FROM (chọn *, số tiền/ngày billAmtPerDay từ hóa đơn b tham gia bên trong lịch c trên dt giữa bắt đầu và kết thúc và bắt đầu <> dt) x nhóm theo acct, số tiền, bắt đầu, kết thúc, billAmtPerDay, năm (dt), tháng (dt);
Nhưng vì lý do tôi không hiểu, máy chủ của tôi không thích bảng này và bị treo trên tham gia bên trong, ngay cả khi tôi thực hiện các phép tính khác nhau. Tôi đang điều tra nếu có bất kỳ giới hạn bộ nhớ tạm thời nào trên đó.
Cảm ơn!
Thời gian thanh toán của bạn trùng với tháng thực hay là một số chức năng "Ngày X của mỗi tháng là khi một giai đoạn mới bắt đầu" loại tình huống? –
Thời hạn thanh toán là không thường xuyên, vì vậy hầu hết các hóa đơn đều dài trung bình 30 +/- 2 ngày, nhưng với một số hóa đơn miễn là 90 ngày trở lên. – bikeclub
Sau đó, bạn cần một số phương pháp để tính toán thời hạn thanh toán được chỉ định một ngày, vì vậy bạn có thể thực hiện nhóm thích hợp. –