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))