我已经工作的处理,以创建用于长度1:n
唯一整数的所有可能的组合中选择列/行的元件。我发现了nCr
函数(combinat包中的combn函数在这里很有用)。使用从一个表中作为R
一旦所有独特出现被重复,它们被附加到包含任何可能的长度+组合的数字1:n
一个合并表。最后的表的相应列(一个记录)的一个子集是这样的(列名为字符串和集表f1
):
c(1,3,4,5,9,10)
我需要从一个辅助数据源选择这些列(df
)一个在一段时间(我通过这个表要循环),所以我的逻辑是使用此代码:
df[,f1$String]
不过,我得到一个消息,说是未定义列选择,但如果我复制并粘贴细胞内容如:
df[,c(1, 3, 4, 5, 9, 10)]
它工作得很好...我已经尝试了所有我可以在此时想到的;如果有人有一些洞察力,将不胜感激。
代码来重现是:
library(combinat)
library(data.table)
library(plyr)
rm(list=ls())
NCols=10
NRows=10
myMat<-matrix(runif(NCols*NRows), ncol=NCols)
XVars <- as.data.frame(myMat)
colnames(XVars) <- c("a","b","c","d","e","f","g","h","i","j")
x1 <- as.data.frame(colnames(XVars[1:ncol(XVars)]))
colnames(x1) <- "Independent.Variable"
setDT(x1)[, Index := .GRP, by = "Independent.Variable"]
colClasses = c("character", "numeric", "numeric")
col.names = c("String", "r!", "n!")
Combination <- read.table(text = "", colClasses = colClasses, col.names = col.names)
for(i in 1:nrow(x1)){
x2<- as.data.frame(combn(nrow(x1),i))
for (i in 1:ncol(x2)){
x3 <- paste("c(",paste(x2[1:nrow(x2),i], collapse = ", "), ")", sep="")
x3 <- as.data.frame(x3)
colnames(x3) <- "String"
x3 <- mutate(x3, "r!" = nrow(x2))
x3 <- mutate(x3, "n!" = nrow(x1))
Combination <- rbind(Combination, x3)
}
}
setDT(Combination)[, Index := .GRP, by = c("String", "r!", "n!")]
f1 <- Combination[717,]
f1$String <- as.character(f1$String)
## reference to data frame
myMat[,(f1$String)]
## pasted element
myMat[, c(1, 3, 4, 5, 9, 10)]
你能提供'$ F1的String'的输出? – ANG
请提供一个可重复的例子。 –
F1 $串的输出为:c(1,3,4,5,9,10) – Anton89