【问题标题】:In R, how to create a loop to divide columns in a data frame在 R 中,如何创建一个循环来划分数据框中的列
【发布时间】:2011-03-12 11:07:53
【问题描述】:

在 R 中,我想创建一个循环,将我的数据帧的前 3000 列写入一个文件,接下来的 3000 列写入另一个文件,依此类推,直到所有列都被分割因此。最好的方法是什么?我知道现在可以通过 CRAN 使用 isplit 和 iterators 函数,但我真的不确定如何去做。请问有什么建议吗?

【问题讨论】:

    标签: r loops for-loop


    【解决方案1】:

    你可以试试这样的:

    library(plyr)
    max.col <- ncol(x)
    l_ply(seq(1, max.col, by=3000), function(i) 
        write.table(x[,i:min(i+2999, max.col)], file=paste("i", i, sep="-"))
    )
    

    【讨论】:

    • 感谢 Shane 的回复!我试过了,结果是一个名为“i”的文件,有 2456 列 - 我假设这是循环的最后一次迭代?我的后续问题是我现在如何修改此代码,以便我可以为每个输出的文件提供单独的名称?例如“i-1”、“i-2”、“i-3” 非常感谢您的所有帮助,它非常有用!我是编程/编码的绝对初学者。
    • 对不起...我的错误。我更新了它以反映您的输出命名约定。
    • 谢谢谢恩!另一个快速跟进 - 如果我想将这些文件中的每一个输出到特定文件夹 - 比如说“i-1”进入文件夹“A-1”,“i-2”按顺序进入文件夹“A-2” - -- 有没有办法让我在 file=paste 语句中指定这个?还是我必须将所有文件写入一个文件夹中,然后找到一种方法将它们复制/移动到相关文件夹中?我试图避免手动执行此操作,因为最终会有数百个这样的文件。再次感谢您详细及时的回复 - 非常感谢!
    • @CCA:我建议深入研究文档和示例。例如,查看help(write.table)。是的:您可以在上面的 paste() 函数调用中指定完整路径。你可以在那里做任何你想做的事情:尝试使用paste 进行试验:帮助(粘贴)。顺便说一句,当您满意时,请接受此作为答案,以便其他人知道问题已解决。
    【解决方案2】:

    不知道你为什么要费心加载 plyr...假设您的数据框是 df...(从 Shane 的回答中窃取了对 min() 的明智使用)

    maxCol <- ncol(df)
    for (i in seq(1, maxCol, by 3000)) {
         write.table(df[,i:min(i+2999, maxCol)], "i")
    }
    

    您可能需要编辑上面的 write.table 命令以添加您喜欢的格式。

    【讨论】:

    • plyr 在此示例中是不必要的(几乎可以使用任何 apply 函数),但总的来说值得了解(这就是我使用它进行演示的原因)。也就是说,for 循环允许副作用,所以我尽量避免它们,除非我想鼓励可能导致“不良”行为的事情。
    猜你喜欢
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多