data.table很棒,因为我可以做滚动连接,甚至可以在组内滚动连接!
library(data.table)
set.seed(42)
metrics <- data.frame(
ID=c(rep(1, 10), rep(2,5), rep(3,5)),
Time=c(1:10, 4:8, 8:12),
val1=runif(20),
val2=runif(20),
val3=runif(20),
val4=runif(20)
)
metrics <- data.table(metrics[sample(1:nrow(metrics), 15),], key=c('ID', 'Time'))
calendar <- data.table(expand.grid(ID=1:3, Time=1:12), key=c('ID', 'Time'))
metrics[calendar,roll=TRUE]
Run Code Online (Sandbox Code Playgroud)
但是,这对我来说不够好.这data.table还有NAs:
> metrics[calendar,roll=TRUE]
ID Time val1 val2 val3 val4
1: 1 1 0.9148060 0.9040314 0.3795592 0.675607275
2: 1 2 0.9370754 0.1387102 0.4357716 0.982817198
3: 1 3 0.9370754 0.1387102 0.4357716 0.982817198
4: 1 4 0.8304476 0.9466682 0.9735399 0.566488424
5: 1 5 0.8304476 0.9466682 0.9735399 0.566488424 …Run Code Online (Sandbox Code Playgroud) dt <- data.table(x=c(1, .9, .8, .75, .5, .1))
dt
x
1: 1.00
2: 0.90
3: 0.80
4: 0.75
5: 0.50
6: 0.10
Run Code Online (Sandbox Code Playgroud)
对于每一行,如何获取该行和接下来两行的x乘积?
x Prod.3
1: 1.00 0.7200
2: 0.90 0.5400
3: 0.80 0.3000
4: 0.75 0.0375
5: 0.50 NA
6: 0.10 NA
Run Code Online (Sandbox Code Playgroud)
更一般地说,对于每一行,如何获得该行和接下来的n行的x乘积?
我想计算一下发生了多长时间.
鉴于以下情况,您可以看到灯光在某些时间点亮,但并非在所有时间点亮.我想规范化数据以将其提供给神经网络.
library(data.table)
d<-data.table(
date = c("6/1/2013", "6/2/2013","6/3/2013","6/4/2013"),
light = c(TRUE,FALSE,FALSE,TRUE)
)
d
date light
1: 6/1/2013 TRUE
2: 6/2/2013 FALSE
3: 6/3/2013 FALSE
4: 6/4/2013 TRUE
Run Code Online (Sandbox Code Playgroud)
我想要计算的是另一列显示与最后一次出现的"距离".
所以对于上面的数据:第一行,因为它上面应该是零第二行,应该是第三行,应该是第二行,应该是零