【发布时间】:2019-04-17 14:42:00
【问题描述】:
我有以下(整洁)格式的数据集:
SAMPLE, MARKER, ALLELE, LENGTH, PEAK
BRIS01, B100, allele 1, NA, 126.95
BRIS01, B100, allele 2, 160, 159.72
BRIS01, B100, allele 3, 162, 162.01
BRIS02, B100, allele 1, 152, 151.4
BRIS02, B100, allele 2, NA, NA
BRIS02, B100, allele 3, NA, NA
每个样本总共有 14 个标记的条目,每个标记都有 5 个等位基因的条目,即使条目只是“NA”。我不确定有多少样本。
我花了一整天的时间尝试将其重组为以下格式,以便对于每个样本,每个标记的所有等位基因值都彼此相邻,但无济于事:
MARKER 1 MARKER 2 MARKER 3
SAMPLE 1, NA, 126.95, 160, 159.72, 162, 162.01, LENGTH, PEAK, LENGTH, PEAK
SAMPLE 2, 152, 151.4, NA, NA, NA, NA, LENGTH, PEAK, LENGTH, PEAK
如果格式看起来有点乱,希望这可能会有所帮助:在每一行中,应该有 141 列;第一列应该包含样本名称,然后是每个标记的 5 个等位基因的等位基因长度和峰值大小。例如,样品、标记 1 长度 1、标记 1 峰值 1、标记 1 长度 2、标记 1 峰值 2、标记 2 长度 1、标记 2 峰值 2 等。 这有点违反直觉,但想象一下每个标记都有列标题,然后是每个等位基因的大小和峰的子列。
我尝试过使用 dpylr、tidy data、melt、cast、dcast、reshape、reshape2、transpose ......但我对 R 不是很好,也没有运气。在实践中,使用长度和峰值作为子列可能不是很好/整洁的数据,但这是我的老板要求解释数据的。任何反馈表示赞赏!
谢谢!
编辑: 我按照建议运行了以下代码:
ultra_wide <-
wide %>%
group_by(SAMPLE, MARKER) %>%
gather(key = "VARS", value = "VALS", c(LENGTH, PEAK)) %>%
spread(MARKER, VALS) %>%
summarize(MARKER1 = paste(c(B100), collapse = ", "),
MARKER2 = paste(c(B132), collapse = ", "),
MARKER3 = paste(c(BL13), collapse = ", "),
MARKER4 = paste(c(BT06), collapse = ", "),
MARKER5 = paste(c(BT09), collapse = ", "),
MARKER6 = paste(c(BT30), collapse = ", "),
MARKER7 = paste(c(BTMS0044), collapse = ", "),
MARKER8 = paste(c(BTMS0067), collapse = ", "),
MARKER9 = paste(c(BTMS0106), collapse = ", "),
MARKER10 = paste(c(B116), collapse = ", "),
MARKER11 = paste(c(B118), collapse = ", "),
MARKER12 = paste(c(B119), collapse = ", "),
MARKER13 = paste(c(BT20), collapse = ", "),
MARKER14 = paste(c(BTMS0114), collapse = ", "))
但是,该命令没有执行任何操作,因为发生了以下错误:
错误:行 (76, 77, 78, 79, 80), (30671, 30672, 30673, 30674, 30675), (81, 82, 83, 84, 85), (30676, 30677, 30678、30679、30680)
之后又持续了几行。
【问题讨论】:
-
您的意思是 LENGTH、PEAK 的值,对吧?
-
是的,对不起,让我编辑一下。
-
MARKER2、MARKER3 的编辑预期输出没有意义
-
让我明白。你想通过标记转座等位基因,对吗?你能给我们一个简单的输出例子吗? Seams RNA-Seq 数据,您要按标记、等位基因还是两者都处理?
-
这是 MicroSat 数据。对于每个标记,我想要所有 5 个彼此相邻的等位基因的等位基因长度和峰值大小。然后,下一个标记的数据应该在右侧,而不是在下方。那有意义吗?因此,对于每个标记,总共 10 列。每行应有 141 列 - 样本 ID,后跟上述数据。
标签: r dataframe data-structures dplyr reshape