2017-02-04 49 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是否有辦法收集當前的一組虛擬變量來創建一個名爲TypeOfCar的變量。 specificially 'tidyr' 和 'dplyr' - 實施例以下(相應於該ID的上述1-6)

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

可以顯示預期的輸出,因爲它不清楚 – akrun

+2

嘗試'輸入$ TypeOfCar < - 名稱(類型)[max.col(類型)]'。你不需要dplyr,沒有分組。 –

+1

哇,這很好,謝謝! –

回答

1

這可以使用 'tidyverse' 庫來完成。以下代碼會生成您之後的輸出。

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

嗨:)這樣做:庫(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