数据框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
答案 0 :(得分:0)
我们可以使用list
在fread
中阅读数据集,并使用rbindlist
中的data.table
和fill = 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")