2

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

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

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

4

1 回答 1

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), ]
于 2013-07-20T14:14:39.880 回答