我在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会使这一点变得轻而易举,但我以前从未使用它而我只是没有得到这个走到了一起。
答案 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