尝试从fsread读取多个csv中的特定列并应用

时间:2018-07-07 04:45:08

标签: r data.table

在这种情况下,我有很多csv文件,例如20个。它们每个都有不同的列名。所以我为他们建立了地图。

map
#   variable location
#          A   1
#          B   1
#          C   2

我试图全部阅读一次,所以我有这样的代码:

Table <- rbindlist(
           apply(map, 1, function(x) {
               fil <- paste0(x[2], ".csv")
               sel <- x[1]
               fread(file = fil,  select = sel)
         }

完成后,我得到一个data.table,其中包含所有数据的1列。如果使用rbind,则会得到所需元素的大矩阵,但无法转换为所需的data.table形式。我该如何实现?请告知,谢谢。

1 个答案:

答案 0 :(得分:2)

问题出在数据集“ map”中属于factor类的列。当我们使用apply时,它将转换为matrix,并且factor列被强制为integer的值,这会导致不匹配。一种选择是转换为character类。使用Map

可以更紧凑地完成此操作
rbindlist(Map(fread, file = paste0(map$location, ".csv"),
                   select = as.character(map$variable)))