从数据集中提取特定列,如果不存在,则创建NA列

时间:2016-08-22 17:09:50

标签: r dataframe subset

数据框df有57列。我后来读过其他csv文件,每个文件可能有相同的57,但更可能有更多或更少的列。我将原始文件的名称取为:

df = read.csv(...)
str = colnames(df)

我知道我可以将数据框的子集作为:

file = read.csv(...)
file = file[, str]

如果file的列与原始列的列数相同或更多,则可以正常工作。额外的列将被简单地删除。但是,如果file的列少于原始列57,则会出现以下错误:

Error in `[.data.frame`(file, , str) : undefined columns selected

有没有办法采用相同的方法,但如果NA中的列不存在,则创建file列?

编辑:包括dput @akrun的输出。我对[{1}}不熟悉,所以我希望这就是你要求的:

文件1示例:

dput

1 个答案:

答案 0 :(得分:0)

我们可以使用listfread中阅读数据集,并使用rbindlist中的data.tablefill = TRUE以及idcol参数来创建单data.table个对象。 fill = TRUE确保为具有较少列数的数据集创建NA元素。

library(data.table)
#get the files from the working directory
files <- list.files(pattern = ".csv")
#read files in a loop with fread and then rbind the data.tables 
rbindlist(lapply(files, fread), fill = TRUE, idcol = "grp")