复制行[max]次,同时复制不频繁项的值[max-Y]次

时间:2018-06-19 13:46:57

标签: r dataframe duplicates copy

我有一个由136列组成的数据框,其中47列包含特定因子的计数数据。我正在使用arules包进行关联规则分析,该包似乎并不能解释累积数据,因为整数被视为唯一项而不是累积计数(即“ 3”只是一个对象,而不是3个实例)东西)。因此,我试图根据每一行的最大值来复制行,同时还要将任何其他数字复制适当的次数。例如:

df <- data.frame(A1 = c(0,2,0,3),A2 = c(1,0,2,0), A3 = c(0,1,3,2))

将成为:

df <- data.frame(A1 = c(0,2,2,0,0,0,3,3,3), 
                 A2 = c(1,0,0,2,2,0,0,0,0), 
                 A3 = c(0,1,0,3,3,3,2,2,0))

如您所见,最大值为3的行将被重复3次。关联的2将重复2次,其余单元格将填充0。

我的许多牢房中都有大量物品,在不久的将来我将不得不再次这样做,因此,如果有人提出任何建议,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您的数据和答案

df <- data.frame(A1 = c(0,2,0,3),A2 = c(1,0,2,0), A3 = c(0,1,3,2))

ans <- data.frame(A1 = c(0,2,2,0,0,0,3,3,3), 
                 A2 = c(1,0,0,2,2,0,0,0,0), 
                 A3 = c(0,1,0,3,3,3,2,2,0))

解决方案

myfun <- function(row) {
   M <- max(row)
    apply(row, 2, function(x) c(rep(x, times=x), rep(0, times=M-x)))
}
library(magrittr)
test <-
    do.call(rbind, lapply(seq_len(nrow(df)), function(x) myfun(df[x, ]))) %>%
        as.data.frame

all.equal(test, ans)
# TRUE