合并不均匀的数据文件

时间:2013-06-14 20:31:42

标签: r csv merge

我在5个单独的CSV文件中有5周的测量数据,我正在寻找一种方法将它们合并到一个有意义的单个文档中。我遇到的问题是并非每个文件中都存在所有数据点,我最大的行数约为20k,而我的最小行数约为2k,因此没有1:1的关系。这是我的数据:

Keyword               URL     5/12 Rank
activity         site.com             2
activity    site.com/page             1
backup    site.com/backup             4

下一个文件看起来像这样:

Keyword               URL     5/19 Rank
activity    site.com/page             2
database    site.com/data             3

我最终想要的是这样的

Keyword               URL     5/12 Rank     5/19 Rank
activity         site.com             2             -
activity    site.com/page             1             2
backup    site.com/backup             4             -
database    site.com/data             -             3

我的偏好是用R来做这件事。我认为 plyr会使这一点变得轻而易举,但我以前从未使用它而我只是没有得到这个走到了一起。

1 个答案:

答案 0 :(得分:2)

使用merge

csv1 <- read.table(header=TRUE, text="
Keyword               URL     5/12_Rank
activity         site.com             2
activity    site.com/page             1
backup    site.com/backup             4
")

csv2 <- read.table(header=TRUE, text="
Keyword               URL     5/19_Rank
activity    site.com/page             2
database    site.com/data             3
")

csv12 <- merge(csv1, csv2, all=TRUE)

#> csv12
#   Keyword             URL X5.12_Rank X5.19_Rank
#1 activity        site.com          2         NA
#2 activity   site.com/page          1          2
#3   backup site.com/backup          4         NA
#4 database   site.com/data         NA          3

如果您有多个表格,可以将它们放在list中并使用Reduce

csv3 <- read.table(header=TRUE, text="
Keyword               URL     5/42_Rank
activity         site.com             5
html        site.com/data             6
")
L <- list(csv1, csv2, csv3)

Reduce(f=function(x,y)merge(x,y,all=TRUE), L)

结果

#   Keyword             URL X5.12_Rank X5.19_Rank X5.42_Rank
#1 activity        site.com          2         NA          5
#2 activity   site.com/page          1          2         NA
#3   backup site.com/backup          4         NA         NA
#4 database   site.com/data         NA          3         NA
#5     html   site.com/data         NA         NA          6