在数据框中的特定位置添加列的优雅方式

Emi*_*aro 7 r apply dataframe matrix-indexing tibble

我有一个带有3个cols的data.frame:日期,费率,价格.我想在价格和价格之前添加来自矩阵的列.

df = tibble('date' = c('01/01/2000', '02/01/2000', '03/01/2000'),
        'rate' = c(7.50, 6.50, 5.54),
        'price' = c(92, 94, 96))
Run Code Online (Sandbox Code Playgroud)

我使用输出矩阵的函数计算了速率的滞后:

rate_Lags = matrix(data = c(NA, 7.50, 5.54, NA, NA, 7.50), ncol=2, dimnames=list(c(), c('rate_tMinus1', 'rate_tMinus2'))

我想在使用名称索引而不是列顺序之后在费率(和价格之前)之后插入这些滞后.

add_column来自tibble包的函数(在data.frame中的两列之间添加一列)不起作用,因为它只接受一个原子向量(因此如果我有10个滞后,我将不得不调用add_column 10次).我可以apply在我的rate_Lags矩阵中使用.然而,然而,我失去了rate_Lags矩阵中的dimnames .

如果我知道特定列名的位置(任何检索位置的函数),使用数字索引(子集)(https://stat.ethz.ch/pipermail/r-help/2011-August/285534.html)就可以工作列名?).

有插入一串柱中的任何简单的方法小号在数据帧/ tibble对象的特定位置?

CPa*_*Pak 3

您可能忽略了以下几点

library(dplyr)
I <- which(names(df) == "rate")
if (I == ncol(df)) {
    cbind(df, rate_Lags)
} else {
    cbind(select(df, 1:I), rate_Lags, select(df, (I+1):ncol(df))) 
}

#     date rate rate_tMinus1 rate_tMinus2 price
# 1 0.0005 7.50           NA           NA    92
# 2 0.0010 6.50         7.50           NA    94
# 3 0.0015 5.54         5.54          7.5    96
Run Code Online (Sandbox Code Playgroud)