我有一个数据帧,例如

Sp1 start end  
A   100   1077 
B   2316  4088
B   26647 28746
C   450    789
D   23     499
D   45999  60000

我想添加两个新的列,在这两个列中我累积添加了以前的开始和结束坐标

对于第一行,我应该始终获得相同的列:

Sp1 start end     new_start  new_end 
A   100   1077    100        1077

然后对于第一个B:

Sp1 start end     new_start  new_end 
A   100   1077    100        1077
B   2316  4088    1078       2850
  • where 1078 = 1077 +1
  • where 2850 = 1078+(4088-2316)

对于另一个B,它是名称:

Sp1 start end     new_start  new_end 
A   100   1077    100        1077
B   2316  4088    1078       2850
B   26647 28746   2851       4950
  • 其中2851 = 2850 +1
  • 其中4950 = 4951 +(28746-26647)

对于另一个C,它是名称:

Sp1 start end     new_start  new_end 
A   100   1077    100        1077
B   2316  4088    1078       2850
B   26647 28746   2851       4950
C   450   789     4951       5290
  • 其中4951 = 4950 +1
  • 其中5290 = 4951 +(789-450)

那么在最后,我应该会得到预期的结果:

Sp1 start end     new_start  new_end 
A   100   1077    100        1077
B   2316  4088    1078       2850
B   26647 28746   2851       4950
C   450   789     4951       5290

如果有人有一个 idea ,那就太棒了!

以下是dput格式的数据帧,如果可以提供帮助的话:

structure(list(Sp1 = c("A", "B", "B", "C"), start = c(100L, 2316L, 
26647L, 450L), end = c(1077, 4088, 28746, 789)), class = "data.frame", row.names = c(NA, 
-4L))

推荐答案

如果你用的是tidyverse,你可以这样做...

df %>% mutate(new_end = start[1] - 1 + cumsum(end + 1) - cumsum(start),
              new_start = lag(new_end, default = start[1] - 1) + 1)

  Sp1 start   end new_end new_start
1   A   100  1077    1077       100
2   B  2316  4088    2850      1078
3   B 26647 28746    4950      2851
4   C   450   789    5290      4951
5   D    23   499    5767      5291
6   D 45999 60000   19769      5768

R相关问答推荐

在特定列上滞后n行,同时扩展框架的长度

更改绘图上的x轴断点,而不影响风险?

MCMC和零事件二元逻辑回归

格点中指数、双曲和反双曲模型曲线的正确绘制

如何写一个R函数来旋转最后n分钟?

筛选出以特定顺序患病的个体

将数据集中的值增加到当前包含的最大值

如何在所有绘图中保持条件值的 colored颜色 相同?

R Select()可以测试不存在的子集列

从服务器在Shiny中一起渲染图标和文本

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

conditionPanel不考虑以下条件

基于已有ID列创建唯一ID

使用相对风险回归计算RR

残差与拟合图上标记点的故障排除

为各个小节生成单独的选项卡

获取列位置

如何在组内创建唯一ID列,因为其他列中的变量在变化

有没有一种方法可以在pivot_longer()中 Select 最后一列,而不需要命名或给出索引号?