Как классифицировать точки данных в соответствии с несколькими факторами в r

#r

#r

Вопрос:

Я хотел бы классифицировать случаи в наборе данных по уровням его факторов. Ниже приведен пример:

Предположим, что фрейм данных выглядит примерно так

 (foo <- data.frame(cat1 = c("a", "b", "c"),
                   cat2 = c("two", "two", "one"),
                   cat3 = c("alpha", "beta", "beta")))

##   cat1 cat2  cat3
## 1    a  two alpha
## 2    b  two  beta
## 3    c  one  beta
  

и все комбинации уровней этих трех факторов являются

 expand.grid(c("a", "b", "c"),
            c("one", "two"),
            c("alpha", "beta"))

##    Var1 Var2  Var3
## 1     a  one alpha
## 2     b  one alpha
## 3     c  one alpha
## 4     a  two alpha
## 5     b  two alpha
## 6     c  two alpha
## 7     a  one  beta
## 8     b  one  beta
## 9     c  one  beta
## 10    a  two  beta
## 11    b  two  beta
## 12    c  two  beta
  

В принципе, я хотел бы получить фрейм данных, такой как следующий

 (foo_res <- cbind(foo, group = c(4,11,9)))

##   cat1 cat2  cat3 group
## 1    a  two alpha     4
## 2    b  two  beta    11
## 3    c  one  beta     9
  

Любое предложение было бы высоко оценено.

Ответ №1:

Вы можете использовать merge

 > names(foo2) <- names(foo)
> foo2$group <- rownames(foo2)
> merge(foo, foo2, all=FALSE)
  cat1 cat2  cat3 group
1    a  two alpha     4
2    b  two  beta    11
3    c  one  beta     9
  

Где foo и foo2 находятся:

 > foo <- data.frame(cat1 = c("a", "b", "c"),
                     cat2 = c("two", "two", "one"),
                     cat3 = c("alpha", "beta", "beta"))

> foo2 <- expand.grid(c("a", "b", "c"),
                          c("one", "two"),
                          c("alpha", "beta"))