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