Dataframe 根据日期在R中翻转数据帧?

Dataframe 根据日期在R中翻转数据帧?,dataframe,r,data-manipulation,Dataframe,R,Data Manipulation,我有以下格式的文件 REGION BASIS_LOCATION CURVE_DATE CONTRACT_BEGIN CONTRACT_END FP x y 2015-12-30 2016-02-01 2016-02-29 2 x y 2016-01-01 2016-02-01 2016-02-29 3 我需要做的是翻转表格,这样输出如下 REGION BASIS L

我有以下格式的文件

REGION BASIS_LOCATION CURVE_DATE    CONTRACT_BEGIN CONTRACT_END   FP
       x       y      2015-12-30    2016-02-01     2016-02-29     2
       x       y      2016-01-01    2016-02-01     2016-02-29     3

我需要做的是翻转表格,这样输出如下

REGION BASIS  LOCATION  Date          2015-12-30   2016-01-01 
x              y        2016-02-01       2          3
x              y          .              .          .
x              y          .              .          .
x              y          .              .          .
x              y        2016-02-29       2          3


努力在工作中完成。感谢您的帮助。

我们可以使用
map2
在“开始”、“结束”列之间创建一个“日期”序列,然后
unest
扩展数据集

library(dplyr)
library(tidyr)
library(purrr)
library(lubridate)
df1 %>% 
    mutate_at(vars(starts_with('CONTRACT')), ymd) %>% 
    mutate(DATE = map2(CONTRACT_BEGIN, CONTRACT_END, seq, by = 'day')) %>%
    pivot_wider(names_from = CURVE_DATE, values_from = FP) %>% 
    select(-c(CONTRACT_BEGIN, CONTRACT_END)) %>%
    unnest(c(DATE))
# A tibble: 29 x 5
#   REGION BASIS_LOCATION DATE       `2015-12-30` `2016-01-01`
#   <chr>  <chr>          <date>            <int>        <int>
# 1 x      y              2016-02-01            2            3
# 2 x      y              2016-02-02            2            3
# 3 x      y              2016-02-03            2            3
# 4 x      y              2016-02-04            2            3
# 5 x      y              2016-02-05            2            3
# 6 x      y              2016-02-06            2            3
# 7 x      y              2016-02-07            2            3
# 8 x      y              2016-02-08            2            3
# 9 x      y              2016-02-09            2            3
#10 x      y              2016-02-10            2            3
# … with 19 more rows
库(dplyr)
图书馆(tidyr)
图书馆(purrr)
图书馆(lubridate)
df1%>%
在(vars(以('CONTRACT')开头),ymd)%>%
突变(日期=map2(合同开始,合同结束,顺序,日期='day'))%>%
枢轴(名称从=曲线日期,值从=FP)%>%
选择(-c(合同开始,合同结束))%>%
unnest(c(日期))
#A tibble:29 x 5
#地区基础_地点日期'2015-12-30``2016-01-01`
#                                   
#1 x y 2016-02-01 2 3
#2 x y 2016-02-02 2 3
#3 x y 2016-02-03 2 3
#4 x y 2016-02-04 2 3
#5 x y 2016-02-05 2 3
#6 x y 2016-02-06 2 3
#7 x y 2016-02-07 2 3
#8 x y 2016-02-08 2 3
#9 x y 2016-02-09 2 3
#10 x y 2016-02-10 2 3
#…还有19排
数据
df1这看起来很有效。除此之外,值显示为。关于如何解决这个问题有什么建议吗?@TimBatten这只是一个
tbl_df
打印输出方法。如果要将其更改为data.frame,只需在末尾执行.data.frame
中的
%>%as.data.frame
,即使在转换为DataFrame时,输出中仍会获得相同的值警告消息:
FP
中的值没有唯一标识;输出将包含列表列。*使用
值\u fn=list(FP=list)
抑制此警告。*使用
values\u fn=list(FP=length)
识别重复项出现的位置*使用
values\u fn=list(FP=summary\u fun)
进行总结duplicates@TimBatten它是
tbl_df
的打印属性。如果您转换为
data.frame
,它将消失(因为我无法复制它)
df1 <- structure(list(REGION = c("x", "x"), BASIS_LOCATION = c("y", 
"y"), CURVE_DATE = c("2015-12-30", "2016-01-01"),
CONTRACT_BEGIN = c("2016-02-01", 
"2016-02-01"), CONTRACT_END = c("2016-02-29", "2016-02-29"), 
    FP = 2:3), class = "data.frame", row.names = c(NA, -2L))