R 如何进行条件合并

R 如何进行条件合并,r,join,inner-join,R,Join,Inner Join,我有两个数据帧,我正在尝试使用一个条件进行内部连接。我将举一个例子来说明我正在尝试做什么: A cnumero cep numero bairro 1 124,35 124 35 K 2 375,NA 375 NA L 3 NA,28 NA 28 M B cnumero bairro XY 1 124,35 J 1 2 375,48 L 2 3 135,28 M 3 合并的第一

我有两个数据帧,我正在尝试使用一个条件进行内部连接。我将举一个例子来说明我正在尝试做什么:

A
  cnumero cep numero bairro
1  124,35 124     35      K
2  375,NA 375     NA      L
3   NA,28  NA     28      M

B

  cnumero bairro XY
1  124,35      J  1
2  375,48      L  2
3  135,28      M  3
合并的第一个条件是,如果
A$cep!=NA
A$numero!=NA
,则使用列
cnumero
进行连接,否则使用列
bairro
进行连接,导致:

new_A
  cnumero cep numero XY
1  124,35 124     35  1
2  375,NA 375     NA  2
3   NA,28  NA     28  3
到目前为止,我所做的是使用以下方法进行内部连接:
A[A$cnumero%在%unique中(B$cnumero),]
,因为在我的真实数据帧中,我在数据帧
B
中有重复的值

编辑:我的数据示例

A = data.frame(cnumero=c("124,35", "375,NA", "NA,28"),cep = c(124, 375, NA), numero = c(35, NA, 28), bairro =  c("K", "L","M"))
B = data.frame(cnumero=c("124,35", "375,48", "135,28"), bairro =  c("J", "L","M"), XY = c(1, 2, 3))
new_A = data.frame(cnumero=c("124,35", "375,NA", "NA,28"),cep = c(124, 375, NA), numero = c(35, NA, 28), XY = c(1, 2, 3))

以这种方式在base R中创建一个解决方案,执行两个步骤,首先连接第一个条件,然后连接第二个条件,最后将结果放在一起:

# the join with the first condition
A_1 <-  merge(A[!is.na(A$cep) & !grepl('NA',A$cnumero), ],B, by = 'cnumero')

# select the column you need
A_1 <- A_1[,c("cnumero", "cep","numero","XY")]

# join for the second condition
A_2 <-  merge(A[is.na(A$cep) | grepl('NA',A$cnumero), ],B, by = 'bairro')

# select columns you need
A_2 <- A_2[,c("cnumero.x", "cep","numero","XY")]

# rename the second part's columns
colnames(A_2) <- colnames(A_1)

# now the result 
new_A <- rbind(A_1,A_2)
new_A
  cnumero cep numero XY
1  124,35 124     35  1
2  375,NA 375     NA  2
3   NA,28  NA     28  3

# in case you need to remove the "temporary" tables
# remove(A_1, A_2)
#与第一个条件的联接

你确定A可以吗?在
A$cnumero
中没有
NA
(查看
is.NA(A$cnumero)
),因此我无法获得您的结果。你的意思是它应该是字符串“NA”
A$cnumero
A$numero
A$cep
是数字,但是
A$cnumero
是字符串。它确实是一个NA,但是如果使用
read.table
导入数据,它就会变成“NA”。如果@Ga13与
dput
共享数据会更容易。或者在使用read.table时添加
na.strings=“na”
。合并两次是否更容易?抱歉,我感到困惑,关键是
cnumero
中不需要
na
。相关列是另外两列,默认情况下,
NA
可以正确识别