基于2列,一个名称和一个近似数字合并数据集

时间:2013-07-20 13:31:21

标签: r merge multiple-columns

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

这是我想做的。我有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

我想基于Name和Number列合并这两个数据集,但Number只需要大约在用户定义的范围内。

例如:如果Number为+ - 10(仅为示例),我想合并。在数据集A中,名称为A,数字为125在数据集B中,名称为A,数字为127(+为125的-10)

对于条目2,两者名称不同,但两者的数字不是+ -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

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

1 个答案:

答案 0 :(得分:0)

这不是很美,但它实现了我认为你所追求的目标。它假设您的数据位于数据框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), ]