首页 > 解决方案 > 我如何在 R 中编写循环函数来为每一行重复这些代码

问题描述

#gg 是我的数据框,因为它包含 1000 个不同的 seqname

seqname       start  end
 scaffold02439   843 1180
 scaffold02439   928 1180
 scaffold02439  3560 3672
 scaffold02439  3560 3672
 scaffold02439  5525 5666
 scaffold02439  5525 5666

#我要取每个seqname的开始和结束值

c <- unique(gg$seqname)
l1 <- gg %>% filter(seqname %in% c[1] )
l1a <- l1[1,2]
l1b <- l1[nrow(l1),3]
l1 <- cbind(c[1],l1a,l1b)
l2 <- gg %>% filter(seqname %in% c[2])
l2a <- l2[1,2]
l2b <- l2[nrow(l2),3]
l2 <- cbind(c[2],l2a,l2b)

如何以循环形式编写它以提取每个值,然后获取该数据的第一行的开始(第二列)和最后一行的结束(第三列)

标签: rloops

解决方案


你可以做这样的事情

library(dplyr)

gg %>% group_by(seqname) %>%                       #group by seqname
   summarise(start = first(start), end = last(end))#extract first and last

这将返回第一个和最后一个条目,它们不一定是 and 的最小值和start最大值end。如果你想要这个,只需使用summarise(start = min(start), end = max(end)).


推荐阅读