在对列表进行一些数据清理之后,重新绑定较大的数据帧列表

时间:2019-02-07 08:50:03

标签: r rbind

我的问题是,在进行某些数据清理之前,我无法合并大量数据帧。但似乎我的数据清除从列表中丢失了。

我有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
})

然后我做了一些数据清理。一些数据框有一些空列,在加载过程中没有被跳过,还有一些我不需要的列。

我如何从列表中的所有数据框中删除一列(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)

我的问题是,当我打开列表或查看列表中的元素时,我的数据清理丢失了。

而且我无法在数据清理之前绑定数据帧,因为它们看起来并不相同。

我在这里做错了什么?

编辑:示例数据*

# 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

0 个答案:

没有答案