R 在特定列之后插入列
如何在每个包含“值”一词的列后添加一列数据,例如名为“蓝色”?我更喜欢使用data.table,但找不到解决方案 谢谢 我需要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
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]