R-将一个数据帧的长度扩展为与另一个数据帧相似
对于下面的问题,我有一个非常不寻常的解决方案。我想知道有没有更好的办法 问题是: 有两个数据集存储在两个不同的数据帧中。其中一个是a产品的日余额,另一个是b产品的周余额。由于一个请求,我需要对两个数据帧执行“并集”,以便进行时间序列可视化。由于产品b没有每日数据,余额将保持不变,直到下一次更新 如何“扩展”产品b的表格,使其与产品a表格具有相同的长度,同时在产品b没有数据的天数内保持平衡 产品A表 数据帧名称:表AR-将一个数据帧的长度扩展为与另一个数据帧相似,r,R,对于下面的问题,我有一个非常不寻常的解决方案。我想知道有没有更好的办法 问题是: 有两个数据集存储在两个不同的数据帧中。其中一个是a产品的日余额,另一个是b产品的周余额。由于一个请求,我需要对两个数据帧执行“并集”,以便进行时间序列可视化。由于产品b没有每日数据,余额将保持不变,直到下一次更新 如何“扩展”产品b的表格,使其与产品a表格具有相同的长度,同时在产品b没有数据的天数内保持平衡 产品A表 数据帧名称:表A Date (yyyy-mm-dd) / Ccy/ Product /Balanc
Date (yyyy-mm-dd) / Ccy/ Product /Balance
2019-12-01 / USD / A / 100
2019-12-01 / GBP / A / 100
2019-12-02 / USD / A / 200
2019-12-02 / GBP / A / 150
2019-12-03 / USD / A / 180
2019-12-03 / GBO / A / 210
产品B表
数据帧名称:表B
Date (yyyy-mm-dd) / Ccy/ Product /Balance
2019-12-01 / USD / B / 100
2019-12-01 / SGD / B / 100
2019-12-03 / USD / B / 180
2019-12-03 / SGD / B / 210
下面是我古怪的解决方案。一定要让我知道你的想法和批评。提前谢谢你
library(tidyverse)
unique_dates <- unique(tableA$date)
expanded_tableB <- unique_dates%>%left_join(tableB, by=c(Date=Date))%>% fill(-c(“date”))%>% fill(-c(“date”),.direction=c(“up”))
union_table <- bind_rows(tableA,expanded_tableB)
库(tidyverse)
唯一的填充日期%fill(-c(“date”)%%>%fill(-c(“date”),.direction=c(“up”))
联合表格这里有一种方法。如果您需要为缺少的日期添加额外的行,对于SGD
的Ccy
和产品“B”的USD
,则首先将按Ccy
分组。使用complete
根据表A中的第一个表和最后一个表填写日期(我相信是根据您的描述)。最后,bind_rows
添加表A
library(tidyverse)
tableB %>%
group_by(Ccy) %>%
complete(Date = seq.Date(min(tableA$Date), max(tableA$Date), by = "day")) %>%
fill(Product, Balance) %>%
bind_rows(tableA)
输出
# A tibble: 12 x 4
# Groups: Ccy [4]
Ccy Date Product Balance
<chr> <date> <chr> <dbl>
1 SGD 2019-12-01 B 100
2 SGD 2019-12-02 B 100
3 SGD 2019-12-03 B 210
4 USD 2019-12-01 B 100
5 USD 2019-12-02 B 100
6 USD 2019-12-03 B 180
7 USD 2019-12-01 A 100
8 GBP 2019-12-01 A 100
9 USD 2019-12-02 A 200
10 GBP 2019-12-02 A 150
11 USD 2019-12-03 A 180
12 GBO 2019-12-03 A 210
#一个tible:12 x 4
#组别:Ccy[4]
Ccy日期产品余额
1新加坡元2019-12-01 B 100
2新加坡元2019-12-02 B 100
3新加坡元2019-12-03 B 210
4美元2019-12-01 B 100
5美元2019-12-02 B 100
6美元2019-12-03 B 180
7美元2019-12-01 A 100
8英镑2019-12-01 A 100
9美元2019-12-02 A 200
10英镑2019-12-02 A 150
11美元2019-12-03 A 180
12 GBO 2019-12-03 A 210
数据
tableA <- data.frame(
Date = as.Date(c("2019-12-01", "2019-12-01", "2019-12-02", "2019-12-02", "2019-12-03", "2019-12-03")),
Ccy = c("USD", "GBP", "USD", "GBP", "USD", "GBO"),
Product = "A",
Balance = c(100, 100, 200, 150, 180, 210),
stringsAsFactors = F
)
tableB <- data.frame(
Date = as.Date(c("2019-12-01", "2019-12-01", "2019-12-03", "2019-12-03")),
Ccy = c("USD", "SGD", "USD", "SGD"),
Product = "B",
Balance = c(100, 100, 180, 210),
stringsAsFactors = F
)
tableA为了澄清,对于产品“B”,每个日期有两行(Ccy
,共USD
和SGD
)。您是否希望在2019-12-02日为USD
和SGD
各增加两个余额?您好,Ben。非常感谢。是的,产品B为COB 2019-12-02增加了两条生产线,非常感谢Ben!我从表A得到的数据没有周末和假日日期。你知道我能做些什么调整吗?你可以通过各种方法过滤工作日,参见。如果您有单独的假日日期列表,也可以根据假日进行筛选,或者通过其他方式进行筛选。例如,一个库RQuantLib
可以检查日期是否在假日,或者为不同日历/国家/地区提供日期之间的假日列表。我在这方面没有太多经验,但看起来确实可行。非常感谢你,本!