我有一个数据表,例如:
CurrOdo Lat NextLat PrevODO NextOdo
2.62 30.01115868 30.01115868
5.19 30.01116407 30.01116407
7.61 30.01116919 30.01116919
18.82 30.01119282 7.61 19.06
19.06 30.01119282 30.01119282
19.35 30.01119339 30.01119339
20.54 30.01122998 19.35 81.5
20.81 30.01122998 20.54 81.5
37.38 30.01122998 20.81 81.5
81.5 30.01132238 30.01132238
atable<-data.table(odo = c(2.62,5.19,7.61,18.82,19.06,19.35,20.54,20.81, 37.38,81.5 ),
Lat = c(30.01115868,30.01116407,30.01116919,NA,30.01119282,30.01119339,NA,NA, NA, 30.01132238),
NextLat=c(30.01115868,30.01116407,30.01116919, 30.01119282, 30.01119282,30.01119339,
30.01122998,30.01122998,30.01122998,30.01122998 ),
PrevLat=c(NA,NA,NA, NA, NA,NA, NA,NA,NA,NA ),
PrevODO=c(NA,NA,NA, 7.61, NA,NA, 19.35,20.54,20.81,NA ),
NextOdo=c(NA,NA,NA, 19.06, NA,NA, 81.5,81.5,81.5,NA ))
Run Code Online (Sandbox Code Playgroud)
Lat值是基于以下公式的滚动计算:
纬度:(NextLat- PrevLat)*((CurrODO-PrevODO)/(NextODO-PrevODO))+ PrevLat
如何计算纬度的示例
Row CurrODO 18.82: (30.01119282- 30.01116919) …Run Code Online (Sandbox Code Playgroud) 我有一个data.table喜欢:
DT = data.table(ColumnA = c(1.51, 1.86, 3.54, 3.79, 7.7))
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建ColumnB它的下一个值ColumnA:
columnA ColumnB
1.51 1.86
1.86 3.54
3.54 3.79
3.79 7.70
7.70
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作并且它正在工作,但是现在它不起作用:
``` DT[, ColumnB:=c(NA,ColumnA[.I + 2]) ]```
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
.Call() 中的错误:提供了 18391 个项目以分配给“ColumnB”列的 18390 个项目。如果您希望“回收” RHS,请使用 rep() 向您的代码读者明确说明这一意图。