Rbinding большой список данных после того, как я сделал некоторую очистку данных в списке - PullRequest
0 голосов
/ 07 февраля 2019

Моя проблема в том, что я не могу объединить большой список фреймов данных перед выполнением некоторой очистки данных.Но похоже, что моя очистка данных отсутствует в списке.

У меня есть 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 и повторном открытии вся очистка данных отсутствует (не пытался это сделать с моими примерами данных).

Мне интересно, не потому ли, что я изменил слияние?

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...