将数据框的每隔一列拆分为两个单独的文件。

4

我希望您能提供性能更好,但与以下代码功能等效的代码:

write.table(results.df[seq(1, ncol(results.df),2)],file="/path/file.txt", row.names=TRUE, sep="\t") 
write.table(results.df[seq(2, ncol(results.df),2)],file="/path/file2.txt",row.names=TRUE, sep="\t")

results.df 是一个类似以下结构的数据框:

row.names 171401    171401 111201     111201
    1      1     0.8320923  10     0.8320923
    2      2     0.8510621  11     0.8510621
    3      3     0.1009001  12     0.1009001
    4      4     0.9796110  13     0.9796110
    5      5     0.4178686  14     0.4178686
    6      6     0.6570377  15     0.6570377
    7      7     0.3689075  16     0.3689075

除了每个标题连续重复两次外,列标题没有一致的规律。

我想创建(1)只包含results.df的奇数列的文件和(2)只包含results.df偶数列的文件。我有一个解决方案,但想知道是否有更好的方法来实现同样的事情。

更新的想法:我在想是否有一种方法可以删除每个已处理的列而不仅仅是复制它。这样,数据框的大小逐渐减小,可能会导致性能提高???


生成这些序列肯定不会成为任何瓶颈。 - IRTFM
@DWin 是的:大约有1000列和200万行。上述数据只是模式的指示性内容。 - Kaleb
我认为在这个过程中,单次调用seq不会成为任何瓶颈。 - IRTFM
可能不是 seq 本身,但每个包含 seq 的语句肯定是。我并不一定要消除 seq(尽管 Dason 的建议可能更好)。我认为有必要提到如何使用数据框中的数据。 - Kaleb
1个回答

5

代码长度只缩短了一点点,但是……

# Instead of 
results.df[seq(1, ncol(results.df), 2]
results.df[seq(2, ncol(results.df), 2]
#you could use 
results.df[c(T,F)]
results.df[c(F,T)]

那个做得很好,而且确实加快了速度。write.table 怎么样呢……有比它更快的方法吗? - Kaleb
我不这么认为 - 你想要写一个表格,使用write.table是我所知道的最好的方法... - Dason
1
正如在 ?write.table 中明确记录的那样,如果您有许多列,则 write.table 可能会很慢,因为它必须检查每一列的类型。如果每一列都是数字,则编写矩阵可能比数据框更快。 - joran
我想要在未来的数据集中包含逻辑和数值数据。对于这个特定的数据集,一个数值矩阵可能比较适合。不过,使用 0-1 代替 TRUE-FALSE 也是一个选择。我在想是否有任何软件包可以替代 write.table 函数。 - Kaleb
@Kaleb 一般来说,写入磁盘的速度更多地受限于您的硬盘和操作系统。如果您想要更快的写入速度,可以购买更快的硬盘。 - joran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接