【发布时间】:2019-01-29 23:31:11
【问题描述】:
我需要折叠一个大表(V19 为 5M),在该表中我根据特定列 (V1) 删除重复项,如果唯一,则合并所有其他列的值(如果不是,则只报告一次结果)。
我从这里尝试了一些解决方案,但这些示例主要针对 2 个变量执行 - 我有 19 个。最终发生的情况是,表的整个其余部分都合并到一个数字列表列中。
输入:
V1 V2 V3 V4 V5 V6
TR1000 chr1 1000 1200 A +
TR1000 chr1 1000 1200 B +
TR1000 chr1 1000 1200 C +
TR2000 chr2 2000 2500 D +
TR2000 chr2 2000 2500 E +
TR3000 chr3 3000 3500 F +
我需要:
V1 V2 V3 V4 V5 V6
TR1000 chr1 1000 1200 A, B, C +
TR2000 chr2 2000 2500 D, E +
TR3000 chr3 3000 3500 F +
【问题讨论】:
-
aggregate(.~V1,df,unique)或者更确切地说是aggregate(.~V1,df,function(x)toString(unique(x)))。如果你得到的是数字而不是值,那只是因为你有因素,所以使用选项stringAsFactors=FALSE或执行df = rapply(df,as.character,'factor',how='replace')或使用dplyr中的groupby +summarize重新读取数据 -
欢迎来到 SO。请edit您的问题并展示您到目前为止所做的尝试。特别是,显示导致“表的整个其余部分组合在一个数字列表列中”的代码。谢谢。
-
请澄清你的问题是从 2 到 19 个变量。示例数据集只有一列
V5需要折叠。对于每个V1,所有其他列都有唯一值。这可能会刺激那些只是聚合/折叠V5的答案。 -
我已经制作了一张代表我实际使用的表格的表格。放入实际表格并不是最佳选择,因为它相当大并且包含复杂的术语。也就是说,@www 给了我一个完美的建议!