2014-09-25 2 views
0

У меня есть сценарий R, который создает кадр данных с 61 столбцом. Файл data.frame создается путем чтения кучи csv-файлов в список data.frames, а затем слияния списка, так что обычно называемые столбцы в каждом data.frame в списке заполняют тот же столбец в результирующем файле data.frame.Как объединить разреженные столбцы в славе данных?

Некоторые из столбцов, которые должны быть объединены, были непостоянно названы в файлах csv (например, date.received vs. received.on.date vs date.sample.received), и мне было интересно, какой лучший подход к их объединению было бы.

У меня было несколько идей:

  • переименовывать столбцы перед объединением в большой lapply над списком.
  • объединить столбцы, которые должны быть такими же, как только у меня data.frame, таким образом, что колонна, которая имеет значение в этой строке используется

является второй подход, возможно (и как?) или есть лучший способ?

ответ

0

Второй подход возможен, и это легко с rbind_all от dplyr. Вот как:

Прежде всего, если у вас есть информация о структуре имен столбцов, которые должны быть сложены вместе, я предлагаю вам попробовать это исправить перед укладкой, как:

colnames_synonymous <- c("date.received", "received.on.date", "date.sample.received") 

list_of_dfs <- lapply(list_of_dfs, function(df) { 
    names(df)[names(df) %in% colnames_synonymous] <- "date_received" 
    return(df) 
}) 

Теперь вы хорошо идти:

dplyr::rbind_all(list_of_dfs) 

Может быть, вам придется сделать некоторые корректировки перед тем, как все столбцы сложены правильно, но теперь, все, что вам нужно сделать, это изменение lapply функцию, чтобы сделать это. Я нахожу этот путь проще, чем преобразовывать некоторые столбцы после перезаписи.

+0

Это на самом деле то, как я реализую первый подход. Что усложняет второй подход? –

+0

На самом деле, у меня нет окончательного ответа на этот вопрос, но я попытаюсь одобрить первый подход (который я назвал «вторым» в своем ответе, извините) = P. Прежде всего, пройдя второй подход, вы можете получить ненужный большой фрейм данных, вызывая проблемы с памятью. В зависимости от того, сколько dfs вы имеете дело, это может быть сложной задачей, как только вам придется сделать некоторые ремонтные работы и некоторые другие манипуляции на этом большом data.frame. Кроме того, одним из преимуществ этого первого подхода является то, что для того, чтобы получить столбцы, все, что вам нужно сделать, это улучшить первый лап. – Athos

 Смежные вопросы

  • Нет связанных вопросов^_^