我的问题是,我不能做一些数据清洗之前合并dataframes的大名单。 但好像我的数据清洗列表中缺少。
我有43 XLSX档案,我已经把在列表中。
这里是我的那部分代码:
file.list <- list.files(recursive=T,pattern='*.xlsx')
dat = lapply(file.list, function(i){
x = read.xlsx(i, sheet=1, startRow=2, colNames = T,
skipEmptyCols = T, skipEmptyRows = T)
# Create column with file name
x$file = i
# Return data
x
})
然后我做了一些datacleaning。 一些dataframes的有那些没有在装载和一些列我只是没跳过需要一些空列。
的我如何除去从列表中的所有dataframes一列(X1)实施例:
dat <- lapply(dat, function(x) { x["X1"] <- NULL; x })
我也适用于列名:
colnames <- c("ID", "UDLIGNNR","BILAGNR", "AKT", "BA",
"IART", "HTRANS", "DTRANS", "BELOB", "REGD",
"BOGFD", "AFVBOGFD", "VALORD", "UDLIGND",
"UÅ", "AFSTEMNGL", "NRBASIS", "SPECIFIK1",
"SPECIFIK2", "SPECIFIK3", "PERIODE","FILE")
dat <- lapply(dat, setNames, colnames)
我的问题是,当我打开列表或查看列表中的元素,我的数据清洗缺失。
而且,由于他们不是在寻找同样的,我不能将数据绑定在清洁之前dataframes。
我在做什么错在这里?
编辑:样本数据*
# Sample data
a <- c("a","b","c")
b <- c(1,2,3)
X1 <- c("", "","")
c <- c("a","b","c")
X2 <- c(1,2,3)
X1 <- c("", "","")
df1 <- data.frame(a,b,c,X1)
df2 <- data.frame(a,b,c,X1,X2)
# Putting in list
dat <- list(df1,df2)
# Removing unwanted columns
dat <- lapply(dat, function(x) { x["X1"] <- NULL; x })
dat <- lapply(dat, function(x) { x["X2"] <- NULL; x })
# Setting column names
colnames <- c("Alpha", "Beta", "Gamma")
dat <- lapply(dat, setNames, colnames)
# Merging dataframes
df <- do.call(rbind,dat)
所以,我刚刚发现我的样本数据这一进展顺利。 我不得不重新打开浏览模式列表中看到我所做的更改。 这并不改变写入CSV时并重新打开所有的数据清洗缺失(haven'tr试图与我的样本数据)的事实。
我想知道是否是因为我已经改变了合并?
# My merge when I wrote this question:
df <- do.call("rbindlist", dat)
# My merge now:
df <- do.call(rbind,dat)
当我用我的真实数据是亘古不变的去那样顺利,所以我想样本数据是坏的。 我不知道我在做什么错了,所以我不能给一些更好的样本数据。
与rbind合并时,我得到的消息:
error in rbind(deparse.level ...) numbers of columns of arguments do not match