【发布时间】:2021-06-01 17:16:41
【问题描述】:
下午好,
在浏览堆栈溢出并没有找到解决我的特定问题的方法后,我决定询问社区,希望这对其他人也有帮助。
我有联合 VCF 格式的基因数据。我正在尝试将多个列转换为仅两个分别封装样本名称和基因型信息的列。这是一个相当大的数据集,所以我正在尝试设置一个允许我这样做的函数或 for 循环。
这是我正在使用的数据格式的模型
df <- structure(list(Chromosome = c("chr 1", "chr 2", "chr 3",
"chr 4", "chr 5", "chr 6"), position = c("123444",
"364829", "098090", "123134", "123234",
"34234"), reference = c("C", "G",
"C,GC", "ATTA", "GATTACA", "TC,GCT"
), alt = c("AC,G", "CG.GT", "A,*",
"GA,CGT", "TA,GTA", "AAC"),
AD_GT_SAMP_1 = c('0,0|./.|', '148,136|0/1|', '148,132|0/1|', '48,236|1/1|', '0,0|./.|','0,0|./.|'),
V5 = c('zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef','zw42dx28.cd14.20180120.ef'),
AD_GT_SAMP_2 = c('0,10|./.|', '148,136|0/1|', '148,132|0/1|', '428,236|1/1|', '10,0|./.|','20,0|./.|'),
V7 = c('xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef','xs82d2x8.bulk.20180121.ef'))) %>%
as.data.frame()
1:4 列对于所有样本都是恒定的。我希望第 5 列的所有样本名称当前存储在 (data[,c(5,7,9,...)]) 中,第 6 列的基因型信息当前存储在 (data[,c(6, 8,10,...)])
我尝试过使用 pivot_longer,虽然尝试时它没有给我错误:
pivot_longer(data = mock_gvcf, cols = c(V5,V7,etc...), names_to = '.value')
数据集将列一直向右移动(例如,在具有 80 列的数据集中,其中 v5-v7-v9-v11... 保存样本的名称,列的内容不会改变,但会移动到v80 列的右侧)。
编辑:下面的 cmets 有助于有效地整理模拟数据的数据。但是,似乎真实数据集中的名称格式是个问题。
真实数据的 samp_id 格式为:(sampid.celltype.collectiondate.stageofcollection) 其中 sampid 有 4 个不同的名称 celltype 有 4 种不同的类型 收集日期有6个时间点 收集阶段有3个时间点
任何建议将不胜感激。提前谢谢你。
【问题讨论】:
-
在代码中列名指定为V5、V7、V9,但在dput中,名称不同
-
是的,正确的。我从列名为 V# 的实际数据集中提取了最后一部分。在模拟 DF 的情况下,它们将是 SAMP_1_NAME 和 SAMP_2_NAME
-
当你说数据集没有改变时。你有没有把它分配给一个对象,即
mock_gcf1 <- pivot_longer(data = mock_gvcf, cols = c(V5,V7,V9), names_to = '.value')并检查mock_gcf1 -
是的,列数保持不变,但它将它们发送到数据帧的末尾。所以列 V5-V7-V9 位于右侧的末尾(例如 80 列,V5-V7-V9 现在位于 V80 的右侧)。
-
如果您可以根据您展示的示例使用预期的输出更新您的帖子,那就太好了
标签: r pivot data-wrangling genetics vcf-variant-call-format