在R中,如何创建一个循环来分割数据帧中的列
问题描述:
在R中,我想创建一个循环,它将我的数据框的前3000列写入一个文件,将下一个3000列写入另一个文件等等,直到所有的列都被分开为止。什么是最好的方法来做到这一点?我明白现在通过CRAN可以使用isplit和iterators函数,但我真的不确定如何去做这件事。有什么建议吗?在R中,如何创建一个循环来分割数据帧中的列
答
你可以尝试这样的:
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="-"))
)
答
不知道为什么你会懒得装plyr ......假设你的数据帧DF ...(从巴蒂尔的回答偷明智地使用分钟()的)
maxCol <- ncol(df)
for (i in seq(1, maxCol, by 3000)) {
write.table(df[,i:min(i+2999, maxCol)], "i")
}
您可能想要编辑上面的write.table命令以添加您的首选格式。
+0
在这个例子中'plyr'是不必要的(可以使用几乎所有的应用函数),但是它通常是值得的(这就是为什么我用它来演示)。这就是说,for循环允许副作用,所以我尽量避免它们,除非我想鼓励可能导致“不良”行为的因素。 – Shane 2010-07-06 20:23:39
谢谢Shane的回复!我试了一下,结果是一个标题为“i”的2456列的文件 - 我认为这是循环的最后一次迭代?我的后续问题是,我现在如何修改此代码,以便我可以为输出的每个文件提供单独的名称?例如“i-1”,“i-2”,“i-3” 非常感谢您的帮助,它非常有用!我是编程/编码的绝对初学者。 – CCA 2010-07-06 20:56:05
对不起......我的错误。我更新它以反映您的输出命名约定。 – Shane 2010-07-06 21:21:26
谢谢Shane!另一个快速跟进 - 如果我想将这些文件输出到特定的文件夹中 - 比如说“i-1”进入文件夹“A-1”,则“i-2”按顺序进入文件夹“A-2” - 有没有办法让我在file = paste语句中指定它?或者我必须将所有文件写入一个文件夹,然后找到一种方法将它们复制/移动到相关的文件夹后?我试图避免这样做手动,因为最后会有数百个这样的文件。再次感谢您的详细和及时的答复 - 非常感谢! – CCA 2010-07-07 16:14:19