首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中编写一个循环,根据列名创建多个不同的数据子集?

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

Stack Overflow用户
提问于 2019-11-04 22:42:46
回答 1查看 374关注 0票数 1

我想编写一个循环,从一个大数据框架(包含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。我想知道的是,如何可能两次使用列名作为变量,以便按照我的意愿写出文件。这有可能吗?一个指标体系会更好吗?任何帮助都是非常感谢的!

到目前为止,我正在做的工作如下:

代码语言:javascript
复制
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")
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 23:06:46

基函数combn是这方面的理想选择。您可以获得其余列名的所有组合2乘2,并对每个组合调用一个函数。

首先是一些数据。

代码语言:javascript
复制
set.seed(1234)
df1 <- matrix(rnorm(5*(4+5)), nrow = 5)
df1 <- as.data.frame(df1)

现在是密码。请注意,我将只保留前4列,而不是9列。您应该将函数fun参数DF = df1的默认值更改为DF = yourdata

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58702115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档