我想编写一个循环,从一个大数据框架(包含48列总计)创建数据子集,该数据集还可以自动地写入.txt文件中。首先,我将描述我试图在每个文件中实现的结构:
,
(前9栏) AA BB
(首9栏) AA CC
(首9栏) AA DD
(首9栏) AA EE
AAxBB.txt
AAxCC.txt
AAxDD.txt
AAxEE.txt
我以前尝试过编写使用列名的循环,但结果对我来说并不好。有关我如何试图编写代码的示例,请参阅此previous question。我想知道的是,如何可能两次使用列名作为变量,以便按照我的意愿写出文件。这有可能吗?一个指标体系会更好吗?任何帮助都是非常感谢的!
到目前为止,我正在做的工作如下:
for (i in colnames(data)){
for (j in colnames(data){
subset = subset(data, select = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "print(i)", "print(j)"
write.table(subsetprint(i)&print("x")&print(j), file ="print(i)&print("x")&print(j)", quote = F, row.names = F, col.names = F, sep = " ", na = "-999")
}
}发布于 2019-11-04 23:06:46
基函数combn是这方面的理想选择。您可以获得其余列名的所有组合2乘2,并对每个组合调用一个函数。
首先是一些数据。
set.seed(1234)
df1 <- matrix(rnorm(5*(4+5)), nrow = 5)
df1 <- as.data.frame(df1)现在是密码。请注意,我将只保留前4列,而不是9列。您应该将函数fun参数DF = df1的默认值更改为DF = yourdata。
first_cols <- 1:4
fun <- function(nms, DF = df1, fc = first_cols){
cols <- c(names(DF)[fc], nms)
outfile <- paste(nms, collapse = 'x')
outfile <- paste(outfile, 'txt', sep = '.')
write.table(DF[cols], outfile,
row.names = FALSE, col.names = FALSE,
quote = FALSE, sep = ' ')
cols
}
combn(names(df1)[-first_cols], 2, fun)https://stackoverflow.com/questions/58702115
复制相似问题