R 计算不同行和不同列中的值之间的差异

R 计算不同行和不同列中的值之间的差异,r,dataframe,dplyr,data.table,plyr,R,Dataframe,Dplyr,Data.table,Plyr,我有这样一个数据帧: ID s1 e1 s2 e2 A 50 150 80 180 A 160 350 280 470 A 355 700 800 1150 B 100 500 150 550 B 550 1500 800 1750 ID s1 e1 s2 e2 diff1 diff2 A 50 150 80 180 A 160 350 280 470 10 100 A 355 700 800 1150 5

我有这样一个数据帧:

ID  s1  e1  s2  e2
A   50  150 80  180
A   160 350 280 470
A   355 700 800 1150
B   100 500 150 550
B   550 1500    800 1750
ID  s1  e1  s2  e2  diff1   diff2
A   50  150 80  180     
A   160 350 280 470 10  100
A   355 700 800 1150    5   330
B   100 500 150 550     
B   550 1500    800 1750    50  250
当ID相同时,我希望计算连续行但不同列中的值之间的差异(对于ID A:s1在第2行减去e1在第1行;s1在第3行减去e1在第2行;s2在第2行减去e2在第1行;s2在第3行减去e2在第2行),并将这些值添加到新列(diff1和diff2)

然后,数据帧将如下所示:

ID  s1  e1  s2  e2
A   50  150 80  180
A   160 350 280 470
A   355 700 800 1150
B   100 500 150 550
B   550 1500    800 1750
ID  s1  e1  s2  e2  diff1   diff2
A   50  150 80  180     
A   160 350 280 470 10  100
A   355 700 800 1150    5   330
B   100 500 150 550     
B   550 1500    800 1750    50  250
这可能吗

先谢谢你


WD

按“ID”分组后,获取“s1”的
lead
,将其从“e1”中减去,并创建“diff1”作为此输出的
lag
。类似地,“diff2”可以由相应的“s2”和“e2”列对创建

library(dplyr)
df1 %>%
    group_by(ID) %>%
    mutate(diff1 = lag(lead(s1) - e1), diff2 = lag(lead(s2)- e2))
# A tibble: 5 x 7
# Groups: ID [2]
#   ID       s1    e1    s2    e2 diff1 diff2
#   <chr> <int> <int> <int> <int> <int> <int>
#1 A        50   150    80   180    NA    NA
#2 A       160   350   280   470    10   100
#3 A       355   700   800  1150     5   330
#4 B       100   500   150   550    NA    NA
#5 B       550  1500   800  1750    50   250

我注意到,当我只有一行ID(一组s1、e1、s2、e2)时,它也会计算与前一行(不同ID)的差异,但我通过删除单个ID行来解决这个问题。@Wannesdermuw我认为
melt
需要成对列。您可以在相应的“e”列中添加NA列,然后执行
melt