我的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是非原子的或太短的"
答案 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)