2014-09-25 57 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