2014-09-25 26 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_alldplyr包中很容易。這裏是如何:

首先,如果您有任何關於應該堆疊在一起的列名的模式的一些信息,我建議你去嘗試疊前修復它,如:

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函數來進行。我發現這種方式比在rbinding之後進行一些列轉換更容易。

+0

這實際上是我將如何實施第一種方法。是什麼讓第二種方法更困難? – 2014-09-26 18:43:12

+0

實際上,我對這個問題沒有確定的答案,但我會嘗試認可第一種方法(我在回答中稱爲「第二個」,對此感到抱歉)= P。 首先,通過第二種方法,可能會導致不必要的大數據幀,從而導致內存問題。取決於你處理多少個dfs,這可能是具有挑戰性的,一旦你需要在這個大數據框架上進行一些修復和其他一些操作。此外,這種第一種方法的一個優點是,爲了獲得專欄,所有你需要做的就是改進第一篇文章。 – Athos 2014-09-27 18:03:46