0

在 R 中,我想测试一个模式是否存在于列表中,以替换位于另一个列表中的位置的元素。

让我举个例子。我的第一个列表如下所示:

表格1:

     [,1]     [,2]    
[1,]ABBABBCA
[2,]ABBUCCCH

我的第二个列表如下所示:

     [,1]     [,2]    
[1,]KIGSPLOM
[2,]ANAMAKAM

我想测试条件,如果模式“KI”出现在我的第二个列表中,那么替换我第一个列表中相同位置的元素。

在这种情况下,KI 出现在“KIGS”的第二个列表中,我将用“KI”替换“ABBA”。所以在两个列表中的位置 [1,1]。

有没有办法在 Rand 中轻松做到这一点,获得以下列表:

     [,1]     [,2]    
[1,]KI      BBCA
[2,]ABBUCCCH

4

1 回答 1

0

如果我正确理解您的答案,可能的解决方案是使用ifelsegrepl. 但是,你有两个矩阵还是两个列表?列表是包含其他对象的通用向量,它与您的示例不同(阅读此站点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循环:ifelsegrepl

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"
于 2016-12-16T14:21:21.100 回答