大佬教程收集整理的这篇文章主要介绍了基于 data.table R 中的列的条件滚动差异或梯度,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要根据非常大的 data.table 中另一列的条件值来获取列的梯度。
> require(data.tablE)
> DT = data.table( ID = c(rep('A',8),rep('B',6)),Condition = c(0,1,1),Value = c(4,3,2,4,3))
我想通过 ID 获取“值”列的滚动梯度,仅适用于 Condition == 1 的行。
> desired_output
ID Condition Value GradIEnt
1: A 0 4 NA # condition isn't met so no gradIEnt
2: A 1 3 0 # condition is met but there is no predecessor. GradIEnt set to 0
3: A 0 2 NA # condition isn't met so no gradIEnt
4: A 0 1 NA # condition isn't met so no gradIEnt
5: A 1 4 1 # condition is met and gradIEnt is 4-3=1
6: A 1 3 -1 # condition is met and gradIEnt is 3-4=-1
7: A 0 2 NA # condition isn't met so no gradIEnt
8: A 1 1 -2 # condition is met and gradIEnt is 1-3=-2
9: B 0 4 NA
10: B 0 3 NA
11: B 1 2 0
12: B 0 1 NA
13: B 0 4 NA
14: B 1 3 1
如果可能,我更喜欢原生 data.table 解决方案。
请注意:可以通过子设置 DT[Condition == 1] 然后重新加入结果来做到这一点。如果可能,我想避免子设置和重新加入。
library(data.tablE)
library(magrittr)
dt = data.table( ID = c(rep('A',8),rep('B',6)),Condition = c(0,1,1),Value = c(4,3,2,4,3))
# 1
dt[Condition == 1,Gradient := Value - shift(Value,fill = first(value)),by = ID][]
#> ID Condition Value Gradient
#> 1: A 0 4 NA
#> 2: A 1 3 0
#> 3: A 0 2 NA
#> 4: A 0 1 NA
#> 5: A 1 4 1
#> 6: A 1 3 -1
#> 7: A 0 2 NA
#> 8: A 1 1 -2
#> 9: B 0 4 NA
#> 10: B 0 3 NA
#> 11: B 1 2 0
#> 12: B 0 1 NA
#> 13: B 0 4 NA
#> 14: B 1 3 1
#2
dt$grad <- c (NA,NA,-1,-2,- 1,1)
dt[Condition == 1,Value2 := Value,by = ID] %>%
.[,Value2 := shift(nafill(Value2,"locf"))] %>%
.[ Value2 != 1,Gradient2 := Value - Value2] %>%
.[,Value2 := NULL] %>%
.[]
#> ID Condition Value Gradient grad Gradient2
#> 1: A 0 4 NA NA NA
#> 2: A 1 3 0 NA NA
#> 3: A 0 2 NA -1 -1
#> 4: A 0 1 NA -2 -2
#> 5: A 1 4 1 1 1
#> 6: A 1 3 -1 -1 -1
#> 7: A 0 2 NA -1 -1
#> 8: A 1 1 -2 -2 -2
#> 9: B 0 4 NA NA NA
#> 10: B 0 3 NA NA NA
#> 11: B 1 2 0 NA NA
#> 12: B 0 1 NA -1 -1
#> 13: B 0 4 NA 2 2
#> 14: B 1 3 1 1 1
由 reprex package (v2.0.0) 于 2021 年 6 月 4 日创建
以上是大佬教程为你收集整理的基于 data.table R 中的列的条件滚动差异或梯度全部内容,希望文章能够帮你解决基于 data.table R 中的列的条件滚动差异或梯度所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。