【发布时间】:2016-03-18 19:13:32
【问题描述】:
我有一个名为mydf 的数据框,其中我有以GS0000XXXX-ASM 开头的示例行,其中包含high confidence 数据和low confidence 数据两部分。我想将每个样本行的高置信度数据和低置信度数据分开,并得到如下所示的结果。
mydf<-structure(list(assembly_id = c("GS000038075-ASM", "High confidence t(2:Y), t(5:7)",
NA, "Low confidence t(2:Y), t(5:7)", NA, NA, "GS000038040-ASM",
"High confidence t(1:17), t(2:6)", NA, "Low confidence t(1:17), t(2:6)",
NA, NA), sample_id = c("GS02589-DNA_E06", NA, NA, NA, NA, NA,
"GS02589-DNA_F01", NA, NA, NA, NA, NA), customer_sample_id = c("AMLM12001KP",
NA, NA, NA, NA, NA, "1114002", NA, NA, NA, NA, NA), `>Id` = c(NA,
"4264", NA, "217", "4264", "219", NA, "3329", "3764", "790",
"1586", "3329"), LeftChr = c(NA, "chr2", NA, "chr2", "chr2",
"chr2", NA, "chr1", "chr2", "chr1", "chr1", "chr1"), LeftPosition = c(NA,
"133017438", NA, "133012293", "133017438", "133018715", NA, "207868617",
"156528197", "91852788", "91852976", "207868617")), .Names = c("assembly_id",
"sample_id", "customer_sample_id", ">Id", "LeftChr", "LeftPosition"
), row.names = c(1L, 3L, 5L, 6L, 7L, 8L, 17L, 19L, 20L, 22L,
23L, 24L), class = "data.frame")
结果
result <- structure(list(assembly_id = c("GS000038075-ASM", "High confidence t(2:Y), t(5:7)",
NA, "GS000038040-ASM", "High confidence t(1:17), t(2:6)", NA,
"GS000038075-ASM", "Low confidence t(2:Y), t(5:7)", NA, NA, "GS000038040-ASM",
"Low confidence t(1:17), t(2:6)", NA, NA), sample_id = c("GS02589-DNA_E06",
NA, NA, "GS02589-DNA_F01", NA, NA, "GS02589-DNA_E06", NA, NA,
NA, "GS02589-DNA_F01", NA, NA, NA), customer_sample_id = c("AMLM12001KP",
NA, NA, "1114002", NA, NA, "AMLM12001KP", NA, NA, NA, "1114002",
NA, NA, NA), `>Id` = c(NA, "4264", NA, NA, "3329", "3764", NA,
"217", "4264", "219", NA, "790", "1586", "3329"), LeftChr = c(NA,
"chr2", NA, NA, "chr1", "chr2", NA, "chr2", "chr2", "chr2", NA,
"chr1", "chr1", "chr1"), LeftPosition = c(NA, "133017438", NA,
NA, "207868617", "156528197", NA, "133012293", "133017438", "133018715",
NA, "91852788", "91852976", "207868617")), .Names = c("assembly_id",
"sample_id", "customer_sample_id", ">Id", "LeftChr", "LeftPosition"
), row.names = c("1", "3", "5", "17", "19", "20", "1.1", "6",
"7", "8", "17.1", "22", "23", "24"), class = "data.frame")
【问题讨论】:
-
为什么要复制行?
-
@akrun 因为每个 GS0000----ASM 行都有一组高置信度和低置信度数据。所以基本上我需要为每个样本行分离高置信度和低置信度数据。这样的样本行有 100 个。
-
您可以尝试
do.call(rbind,lapply(split(mydf, cumsum(!is.na(mydf$sample_id))), function(x) {gr1 <- cumsum(!is.na(x[-1, 'assembly_id'])); do.call(rbind, lapply(split(x[-1,], gr1), function(y) rbind(x[1,], y)))})),然后如果您需要订购HighvsLow,请使用grepl -
我点击了您的大部分问题,其中 零 个问题包含您的任何编码尝试。这不是您个人的代码编写服务,请分享您的尝试并尽最大努力
-
@akrun 谢谢,这很有帮助。您能否在下面用一些 cmets 回答它。