2016-01-22 46 views
-3

我的數據格式如下所示。數據操作

order_id Prod1 prod2 Prod3 Prod4 Prod5 
    A    1  0  1  1  1 
    B    0  0  1  1  0 
    C    1  1  0  1  1 

我想要的方式來改造這個表,使得具有產品爲「1」的所有訂單ID應該是下一個被稱爲產品即

order_id Prod 
A   Prod1 
A   Prod3 
A   Prod4 
A   Prod5 
B   Prod3 
B   Prod4 

等新變種彼此相鄰。我想它R.編程這方面的任何幫助,將不勝感激

回答

1

我們的數據melt以「長」格式,subset行,其中的「價值」爲1,然後基於「ORDER_ID」 order

library(reshape2) 
d1 <- subset(melt(df1, id.var='order_id'), value!=0, select=1:2) 
d1[order(d1$order_id),] 
# order_id variable 
#1   A Prod1 
#7   A Prod3 
#10  A Prod4 
#13  A Prod5 
#8   B Prod3 
#11  B Prod4 
#3   C Prod1 
#6   C prod2 
#12  C Prod4 
#15  C Prod5 
+1

謝謝你的幫助 – Rahul

0

兩個替代解決方案:

1:使用dplyrtidyr

library(dplyr) 
library(tidyr) 
mydf %<>% gather(var, val, -1) %>% filter(val!=0) %>% select(-3) %>% arrange(order_id) 

2:使用data.table

library(data.table) 
mydf <- melt(setDT(mydf), 1)[value!=0][, value := NULL][order(order_id)] 

這既給:

> mydf 
    order_id variable 
1:  A Prod1 
2:  A Prod3 
3:  A Prod4 
4:  A Prod5 
5:  B Prod3 
6:  B Prod4 
7:  C Prod1 
8:  C prod2 
9:  C Prod4 
10:  C Prod5