使用dplyr收集虚拟变量

时间:2017-02-04 04:59:37

标签: r dplyr

我有一个由5个虚拟变量组成的数据集,看起来像这样......

> head(type)
  convertible coupe hatchback sedan wagon
1           0     0         0     1     0
2           0     1         0     0     0
3           1     0         0     0     0
4           1     0         0     0     0
5           1     0         0     0     0
6           1     0         0     0     0

如果我要使用dplyr代码,如何创建一个名为“TypeOfCar”的新变量,其中所有虚拟变量都会折叠到其中?谢谢!

编辑:抱歉模棱两可。使用上面的信息,我想知道在dplyr中是否有办法收集当前的虚拟变量集来制作一个名为TypeOfCar的变量。以下示例(分别对应于ID 1-6以上)

    TypeOfCar
1     sedan
2     coupe
3     convertible
4     convertible
5     convertible
6     convertible

2 个答案:

答案 0 :(得分:2)

我们可以使用base R

data.frame(TypeOfCar = names(type)[as.matrix(type)%*%seq_along(type)], 
                 stringsAsFactors=FALSE)
#    TypeOfCar
#1       sedan
#2       coupe
#3 convertible
#4 convertible
#5 convertible
#6 convertible

答案 1 :(得分:2)

这可以使用&#tidyverse'图书馆 - 特定的' tidyr'和' dplyr'。以下代码生成您之后的输出。

library(tidyverse)
type %>% gather(TypeOfCar, Count) %>% filter(Count >= 1) %>% select(TypeOfCar)

输出:

   TypeOfCar
    <chr>
1 convertible
2 convertible
3 convertible
4 convertible
5       coupe
6       sedan

希望这可以解决您的问题,如果需要更改,请告诉我!感谢。