如何与R中的下一行进行计算和比较

如何与R中的下一行进行计算和比较,r,R,我遇到了一个问题: 我得到了这个df: df <- data.frame(station = c("A", "A", "A", "B", "B"), Initial_height = c(20, 50, 100, 30, 60), final_height = c(50, 100, 300, 60,

我遇到了一个问题:

我得到了这个df:

df <- data.frame(station         = c("A", "A", "A", "B", "B"),
                 Initial_height  = c(20, 50, 100, 30, 60),
                 final_height    = c(50, 100, 300, 60, 110),
                 initial_flow    = c(0.5, 1.2, 1.9, 0.8, 0.7),
                 final_Flow      = c(1.21, 1.92, 0.805, 0.7, 1))

df我们可以在按“站点”分组后,从“最终流量”中减去
lead
即“初始流量”的下一个值

library(dplyr)
out <- df %>% 
  group_by(station) %>%
  mutate(diff_flow = final_Flow - lead(initial_flow)) %>%
  ungroup
库(dplyr)
超出%
分组依据(车站)%>%
变异(差异流量=最终流量-先导(初始流量))%>%
解组
-输出

out
# A tibble: 5 x 6
#  station Initial_height final_height initial_flow final_Flow diff_flow
#  <chr>            <dbl>        <dbl>        <dbl>      <dbl>     <dbl>
#1 A                   20           50          0.5      1.21       0.01
#2 A                   50          100          1.2      1.92       0.02
#3 A                  100           30          1.9      0.805     NA   
#4 B                   30           60          0.8      0.7        0   
#5 B                   60          110          0.7      1         NA   
out
#一个tibble:5x6
#站点初始高度最终高度初始流量最终流量差异流量
#                                         
#1A 20 50 0.5 1.21 0.01
#2 A 50 100 1.2 1.92 0.02
#3 A 100 30 1.9 0.805 NA
#4 B 30 60 0.8 0.7 0
#5 B 60 110 0.7 1 NA

数据表中
您可以使用
shift
获取每组中的下一行

library(data.table)
setDT(df)[,diff_flow := final_Flow - shift(initial_flow, type = 'lead'), station]

#   station Initial_height final_height initial_flow final_Flow diff_flow
#1:       A             20           50          0.5      1.210      0.01
#2:       A             50          100          1.2      1.920      0.02
#3:       A            100          300          1.9      0.805        NA
#4:       B             30           60          0.8      0.700      0.00
#5:       B             60          110          0.7      1.000        NA

你能帮我编辑这个案例吗?@BryanSouza当然,我会检查新的ddataNA的预期效果,例如你是否需要
df%>%groupby(station)%%>%mutate(diff\u flow=case\u when(lead(lag(final\u height)==Initial\u height)~final\u flow-lead(Initial\u flow))
这很有效,我正在尝试搜索“~”做什么。谢谢,当
~
lhs
上的表达式为真时,它是
case\u使用的语法符号,然后执行此操作。默认情况下,所有其他情况将
NA
out
# A tibble: 5 x 6
#  station Initial_height final_height initial_flow final_Flow diff_flow
#  <chr>            <dbl>        <dbl>        <dbl>      <dbl>     <dbl>
#1 A                   20           50          0.5      1.21       0.01
#2 A                   50          100          1.2      1.92       0.02
#3 A                  100           30          1.9      0.805     NA   
#4 B                   30           60          0.8      0.7        0   
#5 B                   60          110          0.7      1         NA   
library(data.table)
setDT(df)[,diff_flow := final_Flow - shift(initial_flow, type = 'lead'), station]

#   station Initial_height final_height initial_flow final_Flow diff_flow
#1:       A             20           50          0.5      1.210      0.01
#2:       A             50          100          1.2      1.920      0.02
#3:       A            100          300          1.9      0.805        NA
#4:       B             30           60          0.8      0.700      0.00
#5:       B             60          110          0.7      1.000        NA