替换字符串并复制包含它的所有行

时间:2018-01-24 07:57:46

标签: r duplicates

我在R中有一个data.table,我想复制行m次,并将'string'替换为'string'_(m次)。

示例表:

输入表: enter image description here 如果重复次数是m(比方说,m = 2)那么我需要输出表看起来像这样: enter image description here 因此对于具有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='|')]

1 个答案:

答案 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)
                  }))