将执行中的文件名更新为data.table

时间:2017-01-28 10:34:59

标签: r data.table

一个非常直截了当的问题。

library(data.table)
dt <- fread("HK0001.csv", drop = 5:24)

这样的数据:

                   Time Price Volume  Amount Flag
 1: 2016-01-04 09:05:06 105.0   9500  993700    1
 2: 2016-01-04 09:20:00 104.1  23500 2446350    0
 3: 2016-01-04 09:30:00 104.1  18500 1924550    1
 4: 2016-01-04 09:30:01 103.9  12500 1300550    0
 5: 2016-01-04 09:30:02 104.1  16118 1675233    1
 6: 2016-01-04 09:30:05 104.0  13000 1352200    0
 7: 2016-01-04 09:30:06 104.1   2500  260100    1
 8: 2016-01-04 09:30:07 104.1   1500  156150    1
 9: 2016-01-04 09:30:08 104.3    500   52150    1
10: 2016-01-04 09:30:10 104.0   1000  104000    0
11: 2016-01-04 09:30:11 103.9   1000  103900    0
12: 2016-01-04 09:30:15 104.0   3500  364450    1
13: 2016-01-04 09:30:17 104.3   2000  208450    1
14: 2016-01-04 09:30:19 104.3   1500  156450    1
15: 2016-01-04 09:30:20 104.4    500   52200    1
16: 2016-01-04 09:30:21 104.4   1500  156600    1
17: 2016-01-04 09:30:22 104.4   1000  104400    1
18: 2016-01-04 09:30:24 104.4   1500  156600    1
19: 2016-01-04 09:30:25 104.0   2000  208000    0
20: 2016-01-04 09:30:27 104.1   3500  364350    1

在同一个文件夹下,有很多这样的csv文件,其名称也是股票代码。如fread行中的示例所示,“0001”是自动收录器名称,有“0002”,“0003”和另外一千多个。

问题:

我想通过添加一个新列,在fread之后将文件名中的自动收录器更新为data.table。

现在列为TimePriceVolumeAmountFlag。我希望将名为stock ticker的一列作为第一列。

我在SO上检查了以下没有解决问题的内容。

Rscript: Determine path of the executing script

getting the name of a dataframe from loading a .rda file in R

非常感谢!

1 个答案:

答案 0 :(得分:3)

如何在导入后从substr添加?

file <- "HK0001.csv"
dt <- fread(file, drop = 5:24)
dt[ , stockTicker := substr( file, 3, 6 ) ]

你也可以把它变成一个函数......

read_in <- function( file ) {
    dt <- fread(file, drop = 5:24)

    dt[ , stockTicker := substr( file, 3, 6 ) ]

    return( dt )
}

然后在文件列表上调用该函数,将它们绑定在一起作为一个大数据表对象(因为现在标识了每个文件的数据):

file.list <- list.files()

DT <- lapply( file.list, read_in )
DT <- rbindlist( DT )