我的第一篇文章,我对 R 很陌生,所以这可能是一个 lob。不过,我已经到处寻找解决方案,所以我终于发帖寻求帮助。如果我需要澄清或提供更多信息,请告诉我。
我有一个大数据框,如下所示:
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
8124 43738 Tdrd1
8102 39301 Tdrd1
1227 9286 Thnsl1
如何按第三列 (name2) 对数据进行分组,找到max()
numReads 的值,并维护关联的长度值?
我的理想输出将是上面的数据,其中包含与“Tdrd1”相关联的两行不包含该因子水平的最大值(具有 8124 和 8102 值的行)。
我试过tapply()
,by()
和aggregate()
. 他们都不能为我提供正确的输出。
提前致谢。
在比预期快得多的评论后进行编辑。谢谢!
理想的示例结果如下所示
numReads length name2
0 7384 Ssxb2
7904 93237 St5
3438 12969 Taf9b
0 996 Tas2r138
0 882 Tas2r143
0 960 Tas2r144
0 6761 Tbx10
8125 43804 Tdrd1
1227 9286 Thnsl1
所以看起来我在这里有两个问题。第一个是根据一个因素对数据进行分组。第二个是如何在组上计算一个函数,但在计算出所选函数后输出整行。
我喜欢聚合()后跟合并()的想法。但是,merge() 函数如何知道原始行的哪一行根据公因子水平从哪个行获取“长度”值?
数据是基于转录注释的基因表达数据的快照。我正在尝试为关联的“name2”选择表达最高的成绩单(以 numReads 而言)。我需要下游标准化的长度数据。
在尝试使用 ROLO 非常有用的建议后进行编辑。再次感谢!
还要感谢 Chase 和 daroczig 的帮助
因此,我尝试使用 ddply() 方法将我的数据帧按“name2”拆分,按读取次数降序排序,然后选择第一行。这有效地为我提供了每个组的最大“name2”值,并保留了我所有的原始信息,尤其是长度。
不幸的是,我试图在 > 34,000 行的数据框中执行此操作。它适用于约 1000 行,甚至约 5000 行,但是当我将整个数据集提供给它时会崩溃。
我尝试使用 .parallel 选项,但失败并出现以下错误:
Loading required package: foreach
Error: foreach package required for parallel plyr operation
我还尝试使用 .progressbar 选项来监控操作。进度条达到 100%,但操作永远不会完成。
关于如何将此操作应用于我的完整数据集的任何想法?