2013-07-20 119 views
2

我已经问过这个问题,并已收到一些帮助。但是,我仍然无法执行我想要的功能。我认为这是因为我没有解释我想做得很好。所以我想再试一次。基于2列,一个名称和一个近似数字合并数据集

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

数据集

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的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 

所有帮助是极大的赞赏。谢谢。

+0

我想是这样的: 合并(A,B,通过= C(如果(ABS(A $数-B $号)<10){ “名称”}其他{ “器Rt1”} ),all = TRUE) 当然,它没有工作......只是想知道如果对上述表扬做了某些修改,它会起作用吗? – TCW

+0

它看起来好像您的A组中的号码实际上与名称A,C或D中的B组中的号码匹配。 。 –

回答

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), ] 
相关问题