ffill
语法
ffill(obj, [limit])
详情
- 如果 obj 是向量,则使用空值前最近的非空元素来填充空值。
- 如果 obj 是数组向量:
- 对于每一行,如果该行为空,则用该行前最近的非空行填充。
- 对于某一列中的空值,使用该列中空值前最近的非空元素填充。
- 如果 obj 是矩阵或表,则对每一列按照上述规则进行填充。
注意: 该函数会生成新的对象,不会改变输入的对象;而函数
ffill!
会改变输入的对象。参数
obj 可以是向量、数组向量、矩阵或表。
limit 是正整数,表示最大可填充的连续空值个数。obj 为数组向量时不支持该参数。
例子
例1.
x=1 2 3 NULL NULL NULL 4 5 6
x.ffill();
返回:[1,2,3,3,3,3,4,5,6]
x;
返回:[1,2,3,,,,4,5,6]。由此可见,x 中的空值没有被填充。
例2. 指定参数 limit
x=1 2 3 NULL NULL NULL 4 5 6
x.ffill(1);
返回:[1,2,3,3,,,4,5,6]
x.ffill(2);
x;
返回:[1,2,3,3,3,,4,5,6]
例3. 指定 obj 为一个表.
date=[2012.06.12,2012.06.12,2012.06.13,2012.06.14,2012.06.15]
sym=["IBM","MSFT","IBM","MSFT","MSFT"]
price=[40.56,26.56,,,50.76]
qty=[2200,4500,,5600,]
timestamp=[09:34:07,09:35:26,09:36:42,09:36:51,09:36:59]
t=table(date,timestamp,sym,price,qty);
t;
得到:
date | timestamp | sym | price | qty |
---|---|---|---|---|
2012.06.12 | 09:34:07 | IBM | 40.56 | 2200 |
2012.06.12 | 09:35:26 | MSFT | 26.56 | 4500 |
2012.06.13 | 09:36:42 | IBM | ||
2012.06.14 | 09:36:51 | MSFT | 5600 | |
2012.06.15 | 09:36:59 | MSFT | 50.76 |
t.ffill();
得到:
date | timestamp | sym | price | qty |
---|---|---|---|---|
2012.06.12 | 09:34:07 | IBM | 40.56 | 2200 |
2012.06.12 | 09:35:26 | MSFT | 26.56 | 4500 |
2012.06.13 | 09:36:42 | IBM | 26.56 | 4500 |
2012.06.14 | 09:36:51 | MSFT | 26.56 | 5600 |
2012.06.15 | 09:36:59 | MSFT | 50.76 | 5600 |
select date, timestamp, sym, price.ffill() as price, qty.ffill() as qty from t context by sym;
得到:
date | timestamp | sym | price | qty |
---|---|---|---|---|
2012.06.12 | 09:34:07 | IBM | 40.56 | 2200 |
2012.06.13 | 09:36:42 | IBM | 40.56 | 2200 |
2012.06.12 | 09:35:26 | MSFT | 26.56 | 4500 |
2012.06.14 | 09:36:51 | MSFT | 26.56 | 5600 |
2012.06.15 | 09:36:59 | MSFT | 50.76 | 5600 |
下例中,数组向量 x 的第四行为空,因此使用第三行 [6, 7, 8] 对其进行填充;第一列的第二个元素为空,故用该列中其之前的最近的非空元素 1 进行填充。
x = array(INT[], 0).append!([1 2 3, NULL 5, 6 7 8, NULL])
x
// output:[[1,2,3],[NULL,5],[6,7,8],[NULL]]
ffill(x)
// output:[[1,2,3],[1,5],[6,7,8],[6,7,8]]