如何在data.table中添加延迟并导致每个观察结果中的更多变量排除
发布时间:2020-12-14 05:31:43 所属栏目:Windows 来源:网络整理
导读:我有一个类似这样的data.table: library(data.table)mydt - data.table(id = LETTERS[1:6],x = 1:6,y = 2:3) mydt id x y1: A 1 22: B 2 33: C 3 24: D 4 35: E 5 26: F 6 3 我想用增加滞后的值替换值列,并导致每次观察(即x [-1] x x [1]).我可以使用惊人的
我有一个类似这样的data.table:
library(data.table) mydt <- data.table(id = LETTERS[1:6],x = 1:6,y = 2:3) > mydt id x y 1: A 1 2 2: B 2 3 3: C 3 2 4: D 4 3 5: E 5 2 6: F 6 3 我想用增加滞后的值替换值列,并导致每次观察(即x [-1] x x [1]).我可以使用惊人的shift()功能做这样的事情. cols <- c('x','y') mydt[,(cols) := shift(.SD,1) + .SD + shift(.SD,1,type = 'lead'),.SDcols = cols ][] id x y 1: A NA NA 2: B 6 7 3: C 9 8 4: D 12 7 5: E 15 8 6: F NA NA 但是这会为没有超前/滞后值的行引入NA.如何修改计算以仅对这些行使用可用的两个值(如na.rm = TRUE)?这样输出就可以了 id x y 1: A 3 5 2: B 6 7 3: C 9 8 4: D 12 7 5: E 15 8 6: F 11 5 我尝试使用sum(…,na.rm = TRUE)而不是运算符,但这给出了错误:总和错误(shift(.SD,1),. SD,shift(.SD,type =“lead) “),na.rm = TRUE): 我也试过以下但是显然会给出其他的东西. mydt[,(cols) := lapply( .SD,function(x) sum(shift(x,x,shift(x,na.rm = TRUE) ),.SDcols = cols ][] id x y 1: A 126 90 2: B 126 90 3: C 126 90 4: D 126 90 5: E 126 90 6: F 126 90 解决方法
正如@akrun和@DavidArenburg指出的那样,shift函数有一个填充参数来解决问题.
cols <- c('total_open','total_send') mydt[,fill = 0) + .SD + shift(.SD,type = 'lead',fill = 0),.SDcols = cols ][] id x y 1: A 3 5 2: B 6 7 3: C 9 8 4: D 12 7 5: E 15 8 6: F 11 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – CPU密集型线程智慧
- 如何在不执行其中的参数的情况下查看Windows环境变量?
- windows-server-2003 – “域用户”可以将计算机加入域吗?
- windows-server-2008 – 端口135 / epmap
- 用户界面 – 什么是“客户端装饰”?
- 如何在Windows下检测NX / XD位
- xaml – Xamarin在按钮内部形成子控件
- windows-runtime – Windows Phone 8.1中的Image上的Opacit
- 作为Windows管理员,您在尝试学习Linux发行版时遇到了哪些问
- Windows – 在IIS上的SSL证书中同时具有主机名和FQDN