如何与R中的下一行进行计算和比较
我遇到了一个问题: 我得到了这个df:如何与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 <- 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