使用ID列合并csv文件

时间:2018-01-11 11:09:07

标签: r csv merge

我需要合并两个csv结构如下:

csv1 =

1.1, 1, 2, 3, 4, 5, 6 
1.2, 1, 2, 3, 4, 5, 6 
1.3, 1, 2, 3, 4, 5, 6 

csv2 =

1.1, a, b, c, d, e, f 
1.2, a, b, c, d, e, f 
1.3, a, b, c, d, e, f 

两个csv的第一列为" ID" (1.1,1.2,1.3)。

所以我需要的是第三个csv结构化的whit相同的行号,使用ID列作为合并点:
csv merged =

1.1, 1, 2, 3, 4, 5, 6, a, b, c, d, e, f 
1.2, 1, 2, 3, 4, 5, 6, a, b, c, d, e, f 
1.3, 1, 2, 3, 4, 5, 6, a, b, c, d, e, f 


我试图使用函数合并,但我没有得到预期的结果。
我使用了以下代码:

> dt1 <- read.csv(test, header = FALSE)<br>
> dt1<br>
   V1 V2 V3 V4 V5 V6 V7<br>
1 1.1  1  2  3  4  5  6<br>
2 1.2  1  2  3  4  5  6<br>
3 1.3  1  2  3  4  5  6<br>
> dt2 <- read.csv(test2, header = FALSE)<br>
> dt2<br>
   V1 V2 V3 V4 V5 V6  V7<br>
1 1.1  a  b  c  d  e  f <br>
2 1.2  a  b  c  d  e  f <br>
3 1.3  a  b  c  d  e  f <br>
> merge(dt1, dt2)<br>
[1] V1 V2 V3 V4 V5 V6 V7<br>
<0 rows> (or 0-length row.names)<br><br>

感谢您的关注。

1 个答案:

答案 0 :(得分:0)

一种方法是:

merge(dt1, dt2, by.x = 'V1', by.y = 'V1')

另一种方式是:

dt1$v11 <- dt2[match(dt1$V1, dt2$V1), 2]
dt1$v12 <- dt2[match(dt1$V1, dt2$V1), 3]
dt1$v13 <- dt2[match(dt1$V1, dt2$V1), 4]
dt1$v14 <- dt2[match(dt1$V1, dt2$V1), 5]
dt1$v15 <- dt2[match(dt1$V1, dt2$V1), 6]
dt1$v16 <- dt2[match(dt1$V1, dt2$V1), 7]

这也是一个重复的问题,可在此处找到答案:

How to join (merge) data frames (inner, outer, left, right)?

Matching values in columns in R

相关问题