#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"))