在R数据帧中创建所有可能的列排列

时间:2018-04-24 09:21:55

标签: r dataframe permutation

我的df看起来像这样:

   code.1 code.2 code.3 code.4
1:     82     93     NA     NA
2:     15     85     93     NA
3:     93     89     NA     NA
4:     81     NA     NA     NA

我想生成一个新的df,它需要列的所有可能的排列,所以例如第5行:8将是"code.2, code.3, code.4, code.1"的值,行9:12是{的值{1}},等等。

我已尝试过排列"来自gtools包但我一直遇到" v是非原子的或太短的"

1 个答案:

答案 0 :(得分:1)

我们可以置换列索引,根据索引选择列,然后组合所有数据框。

library(gtools)

per <- permutations(n = 4, r = 4, repeats.allowed = FALSE)

dat2 <- do.call(rbind, lapply(1:nrow(per), function(x){
  dat_temp <- dat[, per[x, ]]
  names(dat_temp) <- names(dat)
  return(dat_temp)
  }))

head(dat2, 12)
#    code.1 code.2 code.3 code.4
# 1      82     93     NA     NA
# 2      15     85     93     NA
# 3      93     89     NA     NA
# 4      81     NA     NA     NA
# 11     82     93     NA     NA
# 21     15     85     NA     93
# 31     93     89     NA     NA
# 41     81     NA     NA     NA
# 12     82     NA     93     NA
# 22     15     93     85     NA
# 32     93     NA     89     NA
# 42     81     NA     NA     NA

数据

dat <- read.table(text = "   code.1 code.2 code.3 code.4
1     82     93     NA     NA
2     15     85     93     NA
3     93     89     NA     NA
4     81     NA     NA     NA",
                  header = TRUE, stringsAsFactors = FALSE)