假设我具有以下格式的交易数据
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_account
和tr_currency
来获取最近5天的交易价值平均值。
答案 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)