R 在特定列之后插入列

R 在特定列之后插入列,r,data.table,R,Data.table,如何在每个包含“值”一词的列后添加一列数据,例如名为“蓝色”?我更喜欢使用data.table,但找不到解决方案 谢谢 我需要 Blue BCS_code1 BCS_code2 BCS_value Blue Wt_code1 Wt_code2 Wt_value Blue 1/05 125 255 4 1/05 258 154 6 1/05 6/06

如何在每个包含“值”一词的列后添加一列数据,例如名为“蓝色”?我更喜欢使用data.table,但找不到解决方案 谢谢

我需要

 Blue    BCS_code1    BCS_code2   BCS_value  Blue  Wt_code1  Wt_code2   Wt_value   Blue
  1/05      125          255         4       1/05     258       154        6       1/05
  6/06      256          525         8       6/06     112       254        6       6/06

我意识到将有多个名为“Blue”的栏目,但对于我需要的内容来说,这很好。免责声明:我不主张做你想做的事情。以这种方式复制数据需要大量计算,而且可能是不必要的

尽管如此,以下是您将如何处理此问题。首先创建所需大小的空数据帧

dims <- dim(df)
ind <- agrep("value",names(df))
new_dims <- c(dims[1], dims[2] +length(ind))
new_df <- data.frame(matrix(rep(NA, prod(new_dims)), nrow = dims[1]))

dims与@shayaa的答案类似,并遵循以下策略:

在没有data.table的情况下,在第一行使用
which(grepl(“value”,names(DT))
,在最后一行使用
DT[cols]



正如OP所感兴趣的那样,上面的代码并没有向原始表中添加列。对于data.table来说,重复使用名称是非常混乱的,这可能是出于设计,因为这是一个坏主意。

请给出一个小的可复制示例和预期输出。最好不要插入重复的列名,也不清楚“蓝色”中的值应该是什么。因此,本质上,这是一个不明确的问题。你能提供一个代码示例吗?我无法提供一个示例。移动列的计算成本很高,你确定要这样做吗?是的,我需要这样做
dims <- dim(df)
ind <- agrep("value",names(df))
new_dims <- c(dims[1], dims[2] +length(ind))
new_df <- data.frame(matrix(rep(NA, prod(new_dims)), nrow = dims[1]))
names(new_df)[ind + seq_along(ind)] <- "Blue"
new_df[,ind + seq_along(ind)] <- df$Blue
names(new_df)[setdiff(1:new_dims[2], ind + seq_along(ind))] <- names(df)
new_df[,setdiff(1:new_dims[2], ind + seq_along(ind))] <- df

 new_df
  Blue BCS_code1 BCS_code2 BCS_value Blue Wt_code1 Wt_code2 Wt_value Blue
1 1/05       125       255         4 1/05      258      154        6 1/05
2 6/06       256       525         8 6/06      112      254        6 6/06
w0       = which(names(DT) %like% "value")
w        = w0 + seq_along(w0)

cols     = character(length(DT) + length(w))
cols[w]  = "Blue"
cols[-w] = names(DT)

DT[, cols, with=FALSE]