簡體   English   中英

R-計算不同時間間隔之間的運行總計

[英]R - Calculating a Running Total Between Different Time Intervals

我有一個跟蹤某些貸款余額的數據框。 每次向余額付款(“金額”),該資產貸款的新余額都會顯示在“余額”列中。

df = data.frame(Date = c("2015-03-01", "2015-05-01", "2016-07-02", "2017-11-24", "2017-12-15"),
            Property = c("1 Main St", "1 Main St", "1 Main St", "5 Main St", "1 Main St"),
            Amount = c(50000, -10000, -5000, 75000, -4000),
            Balance = c(50000, 40000, 35000, 75000, 31000)
            )

如您所見,日期相當分散,大多數月份沒有任何交易記錄。 我希望能夠制作一個在每個月初具有每個屬性余額的數據框,而不管該月是否有交易。 像這樣:

Month = c("March 2015", "April 2015", "May 2015", "June 2015"),
Property = c("1 Main St", "1 Main St", "1 Main St", "1 Main St").
Balance = c(50000, 50000, 40000, 40000)

它還需要能夠處理當月的最后一筆交易(如果在給定的月份內某物業的交易不止一次)。 有什么想法如何處理嗎?

首先,請確保您的Date字段的類型為“日期”。 這是我用來處理數據的電話:

df = data.frame(Date = as.Date(c("2015-03-01", "2015-05-01", "2016-07-02", "2017-11-24", "2017-12-15"), "%Y-%m-%d"),
            Property = c("1 Main St", "1 Main St", "1 Main St", "5 Main St", "1 Main St"),
            Amount = c(50000, -10000, -5000, 75000, -4000),
            Balance = c(50000, 40000, 35000, 75000, 31000),
            stringsAsFactors = FALSE
            )

注意,我還向data.frame調用添加了stringsAsFactors = FALSE參數。

然后,我使用以下代碼來也許(?)回答您的問題:

library(tidyr)
library(dplyr)
library(lubridate)

arrange(df, Date)

from <- first(df$Date)
to <- last(df$Date)

new_df <- df %>%
        complete(Date = seq.Date(from, to, "day"))%>%
        fill(Property:Balance)%>%
        group_by(year = year(Date), month=month(Date, label = TRUE), Property)%>%
        summarise(Balance = last(Balance))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM