有效地将多列对绑定到1列

时间:2018-06-20 13:09:51

标签: r

我已经按照需要配置了数据,但是花了15行代码。我确定可以在1或2中完成,而且我希望对此有更好的了解。这是...

我有一个包含11个变量的表,该变量包括日期,4对价差和价格观察值,后跟对应于数据列的年份和季度。这4对数据分别对应不同的TBA抵押息票(3%,3.5%,4%,4.5%)。

mbstrimlast table

我需要将8列分别命名为ZSpread和Price,分为2列,然后每对都标记有优惠券类型。

这是我使用的代码。谢谢!

mbs3 <- mbstrimlast[,c("Date",ZSpread="FN3sprd",Price="FN3px")]
names(mbs3) <- c("Date","Zspread","Price")
mbs3.5 <- mbstrimlast[,c("Date",ZSpread="FN3.5sprd",Price="FN3.5px")]
names(mbs3.5) <- c("Date","Zspread","Price")
mbs4 <- mbstrimlast[,c("Date",ZSpread="FN4sprd",Price="FN4px")]
names(mbs4) <- c("Date","Zspread","Price")
mbs4.5 <- mbstrimlast[,c("Date",ZSpread="FN4.5sprd",Price="FN4.5px")]
names(mbs4.5) <- c("Date","Zspread","Price")

mbs3$Type = c("FN3")
mbs3.5$Type = c("FN3.5")
mbs4$Type = c("FN4")
mbs4.5$Type = c("FN4.5")

mbslast = bind_rows(mbs3, mbs3.5, mbs4, mbs4.5)
mbslast <- mbslast %>% mutate(Yeartag = year(mbslast$Date))
mbslast <- mbslast %>% mutate(Qtag = quarters(mbslast$Date, abbreviate = T)) 

1 个答案:

答案 0 :(得分:0)

我们可以使用tidyverse包使代码更干净一些,以完成此任务。首先,我们使用gather从宽到长整形,然后使用typekey创建greplgsub列,最后使用{{ 1}},以使数据恢复为整齐的格式。

spread