【发布时间】:2018-07-07 04:45:08
【问题描述】:
情况就是这样,我有很多 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)
}
完成后,我得到一个包含 1 列所有数据的 data.table。如果我使用rbind,我会得到一个很大的所需元素矩阵,但无法转换为我需要的 data.table 形式。我怎样才能让它发生?请指教,谢谢。
【问题讨论】:
-
您有名称为
1.csv'2.csv` 的文件吗?map是函数的名称rbindlist(lapply(seq_len(nrow(map)), function(i) fread(file = paste0(map[i, 2], ".csv"), select = map[i, 1])))假设“变量”列是character类 -
是的,文件名没问题。我可以读取数据,但无法将其提取出来。
-
请尝试评论中的代码
-
或者另一个选项是
Map(function(x, y) fread(file = x, select = y), paste0(map$location, ".csv"), map$variable)或者更简洁的rbindlist(Map(fread, file = paste0(map$location, ".csv"), select = map$variable)) -
这可能是原因,因为使用
apply,factor被强制转换为整数值并且不起作用
标签: r data.table