【问题标题】:Merging data sets base on 2 columns, one name and one approximate number基于 2 列、一个名称和一个近似数字合并数据集
【发布时间】:2013-07-19 17:22:30
【问题描述】:

我以前问过这个问题,并得到了一些帮助。但是,我仍然无法执行我想做的事情。我想这是因为我没有解释我想做什么。所以我想再试一次。

这是我想做的。我有 2 个数据集

数据集 A

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

数据集 B

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

我想根据名称和数字列合并这两个数据集,但数字只需要大约在用户定义的范围内。

例如:如果数字是彼此的 +- 10(只是一个示例),我想合并。在数据集 A 中,名称为 A,编号为 125 在数据集 B 中,名称为 A,编号为 127(即 +-10 of 125)

对于条目 2 不同,两者的名称都是 B,但数字不是彼此的 +-10

合并表:

   Name Number ValueA ValueB
1:   A    125     16     56
2:   B   1735     76     NA
3:   B   1789     NA    150
4:   C   2985     22     11
5:   D   3245     76     36
6:   E   4211     22     NA
7:   F   4293     NA     49

非常感谢所有帮助。谢谢。

【问题讨论】:

  • 我尝试过这样的事情:merge(A,B,by=c(if(abs(A$Number-B$Number)
  • 看起来您在集合 A 中的号码实际上与您在集合 B 中的姓名 A、C 或 D 的号码不匹配。 .

标签: r merge multiple-columns


【解决方案1】:

这并不漂亮,但它实现了我认为你所追求的。它假定您的数据位于数据帧 AB 中。

M <- merge(A, B, by="Name")
M$test <- abs(M$Number.x - M$Number.y) < 10 # Hard-coded difference
M.y <- M[!M$test,]
M.y$ValueA <- NA
M.y$Number.x <- M.y$Number.y
M$ValueB[!M$test] <- NA
M <- rbind(M, M.y)
M$test <- NULL
M$Number.y <- NULL
rm(M.y)
names(M)[names(M)=="Number.x"] <- "Number"
M <- M[order(M$Number), ]

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2015-06-14
    • 2019-08-03
    • 2017-06-02
    相关资源
    最近更新 更多