сопоставление нескольких строк таблицы с несколькими условиями - PullRequest
1 голос
/ 22 марта 2011

Я создал цикл, подобный приведенному ниже, чтобы проверить условие, сопоставленное со строками в таблице.Если они совпадают, имя строки печатается.если они не совпадают, ничего не происходит.

condition <- c(0,0,1,1)
id <- apply(table, 1,
            function(i) sum(i[1:length(table)] != condition)==0)
idd<-as.matrix(id)
for (i in  1:length(idd)){                     
    if (idd[i] == TRUE) {
        print(rownames(idd)[i])
    }              
}

> table                                   
>          [1] [2] [3] [4]                      
>1651838   1   1   0   0
>1653006   0   0   0   0
>1656415   0   0   0   1
>1657317  -1   0   0   0

Мой вопрос: возможно ли сделать этот цикл для нескольких условий?что-то вроде:

condition <-  c("0,0,0,0","0,0,0,1","0,0,1,0","0,1,0,0","1,0,0,0",
                "0,0,1,1","1,1,0,0","0,1,1,0","1,0,0,1","1,0,1,0",
                "0,1,0,1","1,0,1,1","1,1,0,1","1,1,1,0","0,1,1,1","1,1,1,1")

for(r in 1:length(condition)){
    id <- apply(regulationtable, 1,
                function(i) sum(i[1:length(regulationtable)] != condition[r])==0
                )
    idd<-as.matrix(id)
    test<-list()
    for (i in  1:length(idd)) {                     
        if (idd[i] == TRUE) { 
            print(rownames(idd)[i])
        }              
        test[[i]]<-matrix(idtest)
    }
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Функция% in% dyadic должна возвращать все совпадающие строки:

> rownames(table)[strtab %in% condition]
[1] "1651838" "1653006" "1656415"

> tabl2 <- table[c(1:4, 3), ]
> rownames(tabl2)[strtab %in% condition]
[1] "1651838" "1653006" "1656415" "1656415"

(Я немного удивлен, узнав, что совпадение этого не сделает, поскольку% в% записывается с совпадениемпо своей сути.)

1 голос
/ 22 марта 2011

Как насчет:

## make up data
z <- matrix(c(1,0,0,-1,1,
              1,0,0,0,1,
              0,0,0,0,0,
              0,0,1,0,0),
            nrow=5,
            dimnames=list(LETTERS[1:5],NULL))

condition <-  c("0,0,0,0","0,0,0,1","0,0,1,0","0,1,0,0","1,0,0,0",
                "0,0,1,1","1,1,0,0","0,1,1,0","1,0,0,1","1,0,1,0",
                "0,1,0,1","1,0,1,1","1,1,0,1","1,1,1,0","0,1,1,1","1,1,1,1")

strtab <- apply(z,1,paste,collapse=",")
## rownames(z)[match(condition,strtab)] ## first match only
omat <- outer(condition,strtab,"==")  ## all comparisons
colnames(omat)[col(omat)][omat]       ## select corresponding colnames

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...