我在R中有一个data.table,我想复制行m次,并将'string'替换为'string'_(m次)。
示例表:
输入表: 如果重复次数是m(比方说,m = 2)那么我需要输出表看起来像这样: 因此对于具有OrderId的每一行,输出表应该有m行,其中OrderId更改为OrderId_(1到m),如OrderId_1,OrderId_2等。此更改也应发生在具有OrdId前缀的ProdId字段中。 / p>
每个新行的数量需要增加1
请指导我如何在R中解决这个问题。任何指针都会有很大的帮助。谢谢。
尝试的方法:
m <- 20 # <-- number of rows desired
library(data.table)
Extra_COL <- Base_COL[rep(1:nrow(Base_COL), each=m),]
setDT(Extra_COL)
#Change OrderId
Extra_COL[, OrdId := paste0(OrdId,'_', seq_len(m)), by="OrdLineId"]
#Change Quantity
Extra_COL[, Quantity := Quantity + seq_len(m), by="OrdLineId"]
#New OrderId, so new ProductId. First split the existing ProductId
Extra_COL[, c('SOId', 'Item','Material','LevelId','ConfigId') := tstrsplit(ProductId,"|",fixed=TRUE)]
#Then, build the new productId
Extra_COL[, ProductId := paste(OrdId, Item, , Material, LevelId, ConfigId, sep='|')]
答案 0 :(得分:0)
您可以尝试此操作(df
是您的数据框):
m <- 20
Reduce(f = rbind,
x = lapply(X = seq_len(m),
FUN = function(i) {
# Modify ID:
df_mod <- transform(df, OrdId = paste(OrdId, i, sep = "_"))
# Modify ProdID with new ID:
df_mod <- transform(df_mod, ProdId = paste(OrdId, Item, Material, LevelId, ConfigId, sep = "|"))
return(df_mod)
}))