【发布时间】:2017-12-04 04:19:43
【问题描述】:
我有一个如下所示的数据框:
input <- structure(list(rank = c(1L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 6L, 6L,
7L, 7L, 8L, 8L, 9L, 10L, 11L, 11L, 11L, 11L, 12L, 12L, 13L, 14L,
14L, 15L, 16L, 17L, 18L, 19L), sequence = c("HRIGRGGRYGRKGVAI",
"TQIDELPVDFAAYLGE", "AFSIGLLQRLDFRHNL", "QNDKIAPQDQDSFLDD", "SMHAEMPKSDRERVMN",
"AQSVIFANTRRKVDWI", "PGRVSDVIKRGALRTE", "AEVISRIGEFLSNSSK", "GGDIIAQAQSGTGKTG",
"TFVGGTRVQDDLRKLQ", "QGLVLSPTRELALQTA", "DWIAEKLNQSNHTVSS", "NIVINFDLPTNKENYL",
"AGVIVAVGTPGRVSDV", "SDRERVMNTFRSGSSR", "GFEKPSSIQQRAIAPF", "SGTGKTGAFSIGLLQR",
"LDTLMDLYETVSIAQS", "VRPIPSFDDMPLHQNL", "MPEEVLELTKKFMRDP", "QQRAIAPFTRGGDIIA",
"LHEIEAHYHTQIDELP", "LVARGIDVHHVNIVIN", "ANTRRKVDWIAEKLNQ", "VLVLDEADEMLSQGFA",
"RGALRTESLRVLVLDE", "PQDQDSFLDDQPGVRP", "YGRKGVAINFVTEKDV", "SSKFCETFVGGTRVQD",
"RVLVTTDLVARGIDVH"), start_position = c(353L, 388L, 79L, 3L,
296L, 268L, 155L, 111L, 63L, 130L, 96L, 281L, 337L, 146L, 304L,
45L, 72L, 255L, 22L, 212L, 53L, 379L, 326L, 274L, 174L, 164L,
9L, 361L, 124L, 319L), score = c(0.92, 0.89, 0.87, 0.87, 0.86,
0.86, 0.85, 0.85, 0.84, 0.84, 0.79, 0.79, 0.78, 0.78, 0.77, 0.76,
0.75, 0.75, 0.75, 0.75, 0.74, 0.74, 0.73, 0.72, 0.72, 0.71, 0.68,
0.67, 0.65, 0.63)), .Names = c("rank", "sequence", "start_position",
"score"), row.names = c(NA, -30L), class = c("tbl_df", "tbl",
"data.frame"))
我想做的是以下。查看input$rank,我想将input$score 下的分数相加,直到保持input$rank 下的序列。
例如,考虑第一个序列,从 rows 1:36 开始(input$rank 下的第 37 个值是 1 - 注意input$rank 下有重复值),我的总和是 26.76 - 我是通过 sum(input$score[1:36]) 获得的。
我想过在for或while循环中插入break或next,尽管我对循环中的这些参数不太熟悉。
【问题讨论】:
-
你能添加你的预期输出吗?
-
可以是向量,也可以是其他列,只要保持顺序即可。然后我将输出绑定到另一个数据框
-
“直到 input$rank 下的序列被保持”是什么意思?另请注意,在您发布的示例数据中,只有 30 行。
-
是的,我刚刚粘贴了部分数据框,因为它有超过 4k 行。保持序列我的意思是序列没有中断,即是连续的。在我的示例中,序列从 1:23 开始不间断,然后排名下的下一个数字是 1,这意味着序列被中断。
-
对,我意识到你不能粘贴整个 4k 行,我想暗示的是你发布的数据不允许我们重现你要求的输出,因为它只有 30 行长(不是 36 行)。难怪费德里科想不通。如果您可以重新处理示例数据以使其反映您在实际数据中的特征,那将会很有帮助。你可以编一个等级,比如
1, 1, 2, 3, 4, 1, 2, 3, 3, 5, 5, 1, 2, 4或其他东西,作为更简单、更简洁的真实mcve 的基础
标签: r for-loop while-loop break next