Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-将一个数据帧的长度扩展为与另一个数据帧相似_R - Fatal编程技术网

R-将一个数据帧的长度扩展为与另一个数据帧相似

R-将一个数据帧的长度扩展为与另一个数据帧相似,r,R,对于下面的问题,我有一个非常不寻常的解决方案。我想知道有没有更好的办法 问题是: 有两个数据集存储在两个不同的数据帧中。其中一个是a产品的日余额,另一个是b产品的周余额。由于一个请求,我需要对两个数据帧执行“并集”,以便进行时间序列可视化。由于产品b没有每日数据,余额将保持不变,直到下一次更新 如何“扩展”产品b的表格,使其与产品a表格具有相同的长度,同时在产品b没有数据的天数内保持平衡 产品A表 数据帧名称:表A Date (yyyy-mm-dd) / Ccy/ Product /Balanc

对于下面的问题,我有一个非常不寻常的解决方案。我想知道有没有更好的办法

问题是: 有两个数据集存储在两个不同的数据帧中。其中一个是a产品的日余额,另一个是b产品的周余额。由于一个请求,我需要对两个数据帧执行“并集”,以便进行时间序列可视化。由于产品b没有每日数据,余额将保持不变,直到下一次更新

如何“扩展”产品b的表格,使其与产品a表格具有相同的长度,同时在产品b没有数据的天数内保持平衡

产品A表

数据帧名称:表A

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
可以检查日期是否在假日,或者为不同日历/国家/地区提供日期之间的假日列表。我在这方面没有太多经验,但看起来确实可行。非常感谢你,本!