这是对我最后一个问题的跟进(在我对列表进行了一些数据清理之后,Rbinding large list of dataframes)。我变得更聪明了,前一个问题变得一团糟。
我有 43 个 xlsx 文件,我将它们加载到 R 中的列表中:
file.list <- list.files(recursive=T,pattern='*.xlsx')
dat = lapply(file.list, function(i){
x = read_xlsx(i, sheet=1, col_names = T)
# Create column with file name
x$file = i
# Return data
x
})
然后我添加了一些列名:
my_names <- c("ID", "UDLIGNNR","BILAGNR", "AKT", "BA",
"IART", "HTRANS", "DTRANS", "BELOB", "REGD",
"BOGFD", "VALORD", "UDLIGND",
"UÅ", "AFSTEMNGL", "NRBASIS","FIBILAG", "FILE")
dat <- lapply(dat, setNames, my_names)
然后我删除了一些列:
dat <- lapply(dat, function(x) { x["UÅ"] <- NULL; x })
dat <- lapply(dat, function(x) { x["FIBILAG"] <- NULL; x })
我真的不需要删除它们,但是当我尝试合并数据框时,我不断收到关于这些类的错误。所以我只是删除了它们。
然后我将所有列更改为字符。我对 R 有点陌生,所以我知道这段代码不是很性感,你可能已经为此创建了一个循环或一个函数。但这就是我所做的:
dat <- lapply(dat, function(x) { x["ID"] <- as.character(x["ID"]); x })
[我对所有列都做了同样的事情]
然后我去绑定数据。
df <- rbindlist(dat)
编辑:
我发现问题不是我的绑定方法(感谢您对此的投入)。我已经删除了关于绑定方法的部分。
问题在于我如何更改列表中数据框中列的 coltypes。
我也试过:
dat <- lapply(dat, function(x) { x[,"ID"] <- as.character(x[,"ID"]); x })
我在“ID”之前添加了一个逗号。这没有帮助。我觉得我需要使用 unlist,但我不确定如何在这里使用它?