【问题标题】:Using R to Merge data sets base on information in 2 different columns--a name column and a number column使用 R 合并数据集基于 2 个不同列中的信息——名称列和数字列
【发布时间】:2013-07-19 09:12:13
【问题描述】:

我正在尝试根据 2 个不同列中的信息合并 2 个数据表(csv 文件)。 一个是名称列,另一个是数字列。数据表 A 中的这 2 列需要匹配数据表 B 中的列才能合并。但是,数字列只需要大致匹配即可。举个例子

数据集A

    Name  Number   A Value
 1:    A    125    16   
 2:    B    1735   76   
 3:    C    2985   22   
 4:    D    3245   76   
 5:    E    4211   22 

数据集 B

    Name  Number   B Value
 1:    A    127    56   
 2:    B    1729   84   
 3:    C    2990   11   
 4:    D    3247   36   
 5:    F    4293   49

合并表

    Name  Number   A Value  B Value
 1:    A    125    16        56
 2:    B    1735   76        84
 3:    C    2985   22        11
 4:    D    3245   76        36
 5:    E    4211   22        N/A
 6:    F    4293   N/A       49

我是使用 R 的新手。非常感谢任何帮助!

谢谢!!!

【问题讨论】:

  • 近似匹配是什么意思?有门槛吗?
  • 是的。有一个阈值(我也希望能够在代码中设置它)。在给出的示例中:如果数据集 B 中的数字是数据集 A 中该数字的 +-10,则合并它是可以接受的。对于数据集A中的Name A,编号为127,但数据集B的编号为125。但是,由于125在阈值内,因此,将其合并。使用 R 可以进行这种类型的合并吗?谢谢!!

标签: r merge multiple-columns


【解决方案1】:

一种策略是将两个常用列粘贴到每个数据框中,然后加入/合并该列,如果您不再需要它,则将其删除。像这样的:

# Fake data
A <- data.frame(name = LETTERS[1:5], number = seq(10, 50, 10), Avalue = runif(5, 1, 1000))
B <- data.frame(name = LETTERS[3:7], number = seq(30, 70, 10), Bvalue = runif(5, 1, 1000))

# create id for merging
A$id <- paste(A$name, A$number, sep = "")
B$id <- paste(B$name, B$number, sep = "")

# do it
library("plyr")
AB <- join(A, B, by = "id", type = "full")

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多