Как выбрать значение из столбца на основе критериев выбора для другого столбца? - PullRequest
0 голосов
/ 23 сентября 2011

Как выбрать значение / имя из столбца, основываясь на частоте (число повторений) значения в другом столбце .. в R?

Это мои примерные данные ..:

 Col1   col2  Col3  Col4 
 Yuva    123  qwe   XXYY
 Arun    234  asd   XYXY
 Yuva    870  ghj   XXYX
 Naan    890  qwe   XYYX
 Shan    231  asd   YXYX
 Yuva    453  qwe   YYXY
 Naan    314  ghj   YXYY
 Yuva    908  bnm   YYYx

Теперь я хотел бы знать функцию / оператор, который дает мне пару значений из col1 и Col3 в зависимости от того, сколько раз произошло значение в col3. то есть, каково соответствующее значение в col1, когда qwe встречался один раз (/ дважды / трижды). ожидаемый (обязательный) ответ:

                  Upon giving   I should get
                 --------------------------- 
                    qwe =1      Naan
                    qwe =2      Yuva 
                    qwe=3       ------(not available). similarly
                    asd=1       Arun
                                Shan
                    ghj=1       Yuva
                                Naan
                    ghj = 2      -----(not available)
           and for  bnm=1       Yuva.

Пожалуйста, помогите мне, ребята.

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Функция xtabs возвращает таблицу сопряженности, которая поддерживает индексирование матрицы:

getCombs <- function(nam , cnt) names( 
                   which(xtabs( ~Col1+Col3, data=dat)[ ,nam] == cnt)
                                    )

> getCombs("ghj", 1)
[1] "Naan" "Yuva"
> getCombs("ghj", 3)
character(0)

Если вам нужно, чтобы в качестве значения было указано «недоступно», просто протестируйте результат на length () == 0 и, если так, верните эту строку.

0 голосов
/ 23 сентября 2011

Может быть, что-то вроде этого:

x <- read.table(textConnection("Col1\tcol2\tCol3\tCol4\nYuva\t123\tqwe\tXXYY\nArun\t234\tasd\tXYXY\nYuva\t870\tghj\tXXYX\nNaan\t890\tqwe\tXYYX\nShan\t231\tasd\tYXYX\nYuva\t453\tqwe\tYYXY\nNaan\t314\tghj\tYXYY\nYuva\t908\tbnm\tYYYx\n"), header=TRUE, sep="\t", stringsAsFactors=FALSE)

selCol1 <- function(x, valCol3, occur) {
    s <- subset(x, Col3==valCol3)
    f <- as.factor(s$Col1)
    t <- table(f)
    idx <- which(t==occur)
    if(length(idx)==0)
        return(NA)
    else
        return(levels(f)[idx])
}

selCol1(x,"qwe",1)
selCol1(x,"qwe",2)
selCol1(x,"qwe",3)
selCol1(x,"ghj",1)
selCol1(x,"ghj",2)
selCol1(x,"bnm",1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...