在R中,我想测试列表中是否存在模式,以替换位于另一个列表中位置的元素。
让我举个例子。我的第一个列表如下所示:
表1:
[1] [2]
[1,] ABBA 丰原
[2,] ABBU CCCH
我的第二个清单如下:
[1] [2]
[1,] KIGS PLOM
[2,] ANAM AKAM
我想测试条件,如果我的第二个列表中存在模式“KI”,则替换我第一个列表中相同位置的元素。
在这种情况下,KI出现在我的第二个“KIGS”列表中,我将用“KI”替换“ABBA”。因此在两个列表中的位置[1,1]。
有没有办法在兰德轻松做到这一点获得以下列表:
[1] [2]
[1,] KI 丰原
[2,] ABBU CCCH
答案 0 :(得分:0)
如果我理解您的答案,可能的解决方案是使用与ifelse
相关的命令grepl
。但是,你有两个矩阵或两个列表吗?
列表是包含其他对象的通用向量,它与您的示例不同(请阅读此站点http://www.programcreek.com/2014/01/vector-array-list-and-data-frame-in-r/)。
然后:
以两个矩阵为例:
table1<-matrix(c("ABBA","BBCA","ABBU","CCCH"),nrow=2,ncol=2,byrow=TRUE)
table2<-matrix(c("KIGS","BBCA","ABBU","CCCH"),nrow=2,ncol=2,byrow=TRUE)
table1
[,1] [,2]
[1,] "ABBA" "BBCA"
[2,] "ABBU" "CCCH"
table2
[,1] [,2]
[1,] "KIGS" "BBCA"
[2,] "ABBU" "CCCH"
我使用for
循环ifelse
,条件元素选择和grepl
命令:
for(j in 1:ncol(table2)){
for(i in 1:nrow(table2)) {
table2[i,j]<-ifelse(grepl("KI",table2[i,j])==TRUE,table1[i,j],table2[i,j])
}}
然后我们将table2作为:
table2
[,1] [,2]
[1,] "ABBA" "BBCA"
[2,] "ABBU" "CCCH"