【问题标题】:Merge csv file using ID column [duplicate]使用 ID 列合并 csv 文件 [重复]
【发布时间】:2018-06-20 16:47:13
【问题描述】:

我需要合并两个结构如下的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 结构,使用 ID 列作为合并点:
csv 合并 =

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>

感谢关注。

【问题讨论】:

  • by= 未指定时,合并将使用所有列进行合并,因此不匹配。试试merge(dt1, dt2, by = "V1"),它应该可以工作。

标签: r csv merge


【解决方案1】:

一种方法是:

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

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 2021-12-06
    • 2014-03-31
    • 2020-09-23
    • 2019-10-30
    • 2012-01-14
    • 2015-05-21
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多