R 无法使用匹配函数进行匹配,并提供NA错误

R 无法使用匹配函数进行匹配,并提供NA错误,r,R,可以使用匹配函数替换相应的值,并提供错误信息 订阅的工作分配中不允许使用NAs请帮助我获取预期的输出 as1 <- data.frame(ID = c(1,2,3,6), pID = c(21,22,23,26), Values = c(435,33,45,12)) as2 <- data.frame(Values_a = c(435, 676), Values_b = c(

可以使用匹配函数替换相应的值,并提供错误信息
订阅的工作分配中不允许使用NAs
请帮助我获取预期的输出

as1 <- data.frame(ID = c(1,2,3,6),
                  pID = c(21,22,23,26),
                  Values = c(435,33,45,12))

as2 <- data.frame(Values_a = c(435, 676),
                  Values_b = c(544, 676))

as1$Values[match(as2$Values_a, as1$Values)] <- as2$Values_b


Error in as1$Values[match(as2$Values_a, as1$Values)] <- as2$Values_b : 
  NAs are not allowed in subscripted assignments

676与
值匹配时,它返回
NA
,并且不能将其作为
中的索引子集为1$Values
。如果要使用
匹配
尝试:

inds <- !is.na(match(as2$Values_a, as1$Values))
as1$Values[inds] <- as2$Values_b[inds]

676与
值匹配时,它返回
NA
,并且不能将其作为
中的索引子集为1$Values
。如果要使用
匹配
尝试:

inds <- !is.na(match(as2$Values_a, as1$Values))
as1$Values[inds] <- as2$Values_b[inds]

match
中有一个
nomatch
参数。默认情况下,它是
NA
。我们可以将其更改为0,这应该与
R
中的一样,索引从1开始,而不是从0开始

inds <- match(as2$Values_a, as1$Values, nomatch = 0)
as1$Values[inds] <- as2$Values_b[inds]

注意:包装
!在
match
周围使用is.na
作为索引可能会导致不正确的输出,因为它基于逻辑值,因为未使用
match
索引中的信息。它可以根据不同的值顺序进行赋值

match
中有一个
nomatch
参数。默认情况下,它是
NA
。我们可以将其更改为0,这应该与
R
中的一样,索引从1开始,而不是从0开始

inds <- match(as2$Values_a, as1$Values, nomatch = 0)
as1$Values[inds] <- as2$Values_b[inds]
注意:包装
!在
match
周围使用is.na
作为索引可能会导致不正确的输出,因为它基于逻辑值,因为未使用
match
索引中的信息。它可能导致基于不同值顺序的赋值

as1
#  ID pID Values
#1  1  21    544
#2  2  22     33
#3  3  23     45
#4  6  26     12