如何在R中编写循环以根据列名创建多个不同的数据子集?

我想编写一个循环,以从大型数据帧(总共包含48列)创建数据子集,该数据集也可以自动将这些子集写到.txt文件中。我将首先描述每个文件中要实现的结构:

  • 前9列应按原样打印在从主文件创建的每个子集中。这些对于创建的所有文件都是必需的。每个子集共有11列。
  • 第10列和第11列是每个子集中将要更改的内容。循环应遍历原始数据帧中的其余39列,并以所有可能的方式将它们合并。因此,如果原始数据集中的列名称为AA,BB,CC,DD,EE,则子集数据的一些示例组合为:
  

(前9列)AA BB

     

(前9列)AA CC

     

(前9列)AA DD

     

(前9列)AA EE

  • 应根据第10列和第11列的名称写出文件。因此,循环创建的文件将是:
  

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")
    }
}
Shuzhenabc123 回答:如何在R中编写循环以根据列名创建多个不同的数据子集?

基本功能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://www.f2er.com/3163305.html

大家都在问