2017-02-04 4 views
1

У меня есть набор данных, который состоит из 5 фиктивных переменных, который выглядит, как это ....Использование dplyr собрать фиктивные переменные

> 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 собрать текущий набор фиктивных переменных, чтобы сделать ONE переменную под названием TypeOfCar. Пример ниже (соответствующее к идентификаторов выше 1-6)

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

Можете ли вы показать ожидаемый результат, поскольку он непонятен. – akrun

+2

Попробуйте 'type $ TypeOfCar <- names (type) [max.col (type)]'. Вам не нужно dplyr, нет группировки. –

+1

Ничего себе, что отлично поработал, спасибо! –

ответ

1

Это может быть сделано с помощью '' tidyverse библиотеки - specificially '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 

Надеемся, что это решит вашу проблему, дайте мне знать, если нужны какие-либо изменения! Благодарю.

+0

Если бы это помогло ответить на ваш вопрос, было бы очень полезно, если бы вы могли отметить вопрос, как было сказано. Благодаря! :) – George

+0

Эй, Джордж, как я смогу вернуть его обратно в набор данных? Кажется, когда я пытаюсь вернуться к исходному фреймворку данных, данные разбросаны. –

+0

Привет :) Это делает следующее: library (tidyverse) D%>% mutate (ID = 1: nrow (D))%>% gather (TypeOfCar, Count, -ID)%>% filter (Count> = 1) %>% аранжировать (ID)%>% select (TypeOfCar) – George

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 
Смежные вопросы