R 从矩阵检索数据时替换为0

R 从矩阵检索数据时替换为0,r,matrix,R,Matrix,我正在填写数值​​数据帧中的列的值​​以矩阵形式出现。从称为e1和e2的两列执行对值的搜索。但这些列中的任何一列都可能包含矩阵中不存在的字符串。这当然会产生错误,但我想知道是否有可能继续用不存在的值0填充 x<-cbind(c(0.3,0.35,0.35,0),c(0.2,0.2,0.4,0.2) ,c(0,0.6,0.1,0.3),c(0.5,0.25,0.25,0)) colnames(x) <- c("A","B","C","D") rownames(x) <- c("A

我正在填写数值​​数据帧中的列的值​​以矩阵形式出现。从称为e1和e2的两列执行对值的搜索。但这些列中的任何一列都可能包含矩阵中不存在的字符串。这当然会产生错误,但我想知道是否有可能继续用不存在的值0填充

x<-cbind(c(0.3,0.35,0.35,0),c(0.2,0.2,0.4,0.2)
,c(0,0.6,0.1,0.3),c(0.5,0.25,0.25,0))
colnames(x) <- c("A","B","C","D")
rownames(x) <- c("A","B","C","D")

y<-as.data.frame(cbind(c(1,2,3,4,5,6)
,c("A","A","B","A","B","A"),c("D","C","C","D","D","J")))
colnames(y) <- c("id","e1","e2")

index_df = y%>% select(e1,e2)
colnames(index_df)<-c('rows','cols')

y$l<-x[as.matrix(index_df)]
x[as.matrixindex_df]中出错:下标超出范围

我们可以将x的行和列名与y的e1和e2列匹配,然后使用它从x中子集值


我们需要根据%中出现的值创建一个索引。这里,“J”不是“x”的列名。所以,使用“i1”,我们创建一个逻辑索引,只更新列名和“e2”匹配的行。现在,我们可以直接使用OP的语法

i1 <- index_df$cols %in% colnames(x)
y$l[i1] <- x[as.matrix(index_df[i1,])]
y
#  id e1 e2    l
#1  1  A  D 0.50
#2  2  A  C 0.00
#3  3  B  C 0.60
#4  4  A  D 0.50
#5  5  B  D 0.25
#6  6  A  J   NA
y$l[is.na(y$l)] <- 0
i1 <- index_df$cols %in% colnames(x)
y$l[i1] <- x[as.matrix(index_df[i1,])]
y
#  id e1 e2    l
#1  1  A  D 0.50
#2  2  A  C 0.00
#3  3  B  C 0.60
#4  4  A  D 0.50
#5  5  B  D 0.25
#6  6  A  J   NA