使用最近5天的R交易计数(按交易帐户)(按交易币种)

时间:2018-07-29 19:13:37

标签: r

假设我具有以下格式的交易数据

 Tr_account.      Tr_date.     Tr_amount.    Tr_currency
 A01.             13.             2000.          Inr
 A01.             13.             3000.          Inr
 A01.             15.             1500.          Usd
 A02.             14.             6000.          Usd
 A02.             19.             7000.           Gbp
 A02.             14.             8000.           Inr

我想得到一个表,该表要在R中的单个表中按tr_accounttr_currency来获取最近5天的交易价值平均值。

2 个答案:

答案 0 :(得分:0)

library(dplyr)
data %>% group_by(Tr_account.,Tr_currency) %>%
         arrange(Tr_account.,Tr_currency,Tr_date.)%>% 
         summarise(Avg = mean(tail(Tr_amount.,n=5),na.rm = TRUE))

更新:使用@MKR过滤规则。我们可以在4天内找到所有交易,然后申请计数

data %>% filter(Tr_date. >= max(Tr_date.)-4) %>%
         group_by(Tr_account.,Tr_currency) %>% summarise(N=n())

答案 1 :(得分:0)

要计算最近mean天的5,重要的是找到last天并过滤从上一个日期起过去5天的记录。这将在同一天处理多个交易,这是非常期望的。

使用dplyr的解决方案可以是:

library(dplyr)

df %>% mutate(Tr_date. = as.Date(Tr_date., format = "%d-%m-%Y")) %>%
  group_by(Tr_account., Tr_currency) %>%
  # All records from previous 5 days 
  filter(Tr_date. >= (max(Tr_date.)-5)) %>%
  summarise(Tr_amount. = mean(Tr_amount.))

# # A tibble: 5 x 3
# # Groups: Tr_account. [?]
#   Tr_account. Tr_currency Tr_amount.
#   <chr>       <chr>            <dbl>
# 1 A01.        Inr               2500
# 2 A01.        Usd               1500
# 3 A02.        Gbp               7000
# 4 A02.        Inr               8000
# 5 A02.        Usd               6000

数据:

注意: 由于OP希望最后5天平均有效,因此,我更改了Tr_date.列以表示日期。

df <- read.table(text = 
"Tr_account.      Tr_date.         Tr_amount.    Tr_currency
A01.             13-07-2018             2000.          Inr
A01.             13-07-2018             3000.          Inr
A01.             15-07-2018             1500.          Usd
A02.             14-07-2018             6000.          Usd
A02.             19-07-2018             7000.           Gbp
A02.             14-07-2018             8000.           Inr",
header = TRUE, stringsAsFactors = FALSE)