我之前已经问过这个问题并得到了一些帮助。但是,我仍然无法执行我想要的任务。我想这是因为我没有解释我想做得好的事情。所以我想再试一次。
这是我想做的。我有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
非常感谢所有帮助。谢谢。
答案 0 :(得分:0)
这不是很美,但它实现了我认为你所追求的目标。它假设您的数据位于数据框A
和B
。
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), ]