2016-02-12 85 views
2

如何轉換計數項目df,可以到DF2,其中Df由下式給出:轉換爲正確的格式,並在數據幀

> df 
    ID VALUES 
1 1 a,b,c,d 
2 2  a 
3 3 c,d,f,g 

和DF2應該是這個樣子:

> df2 
    ID a b c d f g 
1 1 1 1 1 1 0 0 
2 2 1 0 0 0 0 0 
3 3 0 0 1 1 1 1 

其中來自df的值已被分解成單獨的列,1和0反映該ID是否與該值(來自df)相關聯。

這是否有特定的功能?我認爲這是table()所做的,但如果是這種情況,我無法弄清楚。

+1

你提出這是一個datafrrame,但它打印就像它是一個矩陣。 –

+2

最近這個也是:http://stackoverflow.com/questions/35237877/r-split-data-to-frequency/35238311 – thelatemail

+0

thx指向我那裏。 – val

回答

3

下面是一個使用沒有多餘的包的方法:

0 + t(sapply(df[['VALUES']], function(x) { 
           letters[1:6] %in% scan(text=x, what="", sep=",") })) 
Read 4 items 
Read 1 item 
Read 4 items 
     [,1] [,2] [,3] [,4] [,5] [,6] 
a,b,c,d 1 1 1 1 0 0 
a   1 0 0 0 0 0 
c,d,f,g 0 0 1 1 0 1 

它返回一個矩陣,它不依賴於值列是字符,而不是因素。如果你想壓制來自scan的信息消息,那麼有一個參數。你可以用cbind這個ID列:

cbind(df["ID"], 0+ t(sapply(df[['VALUES']], function(x) {letters[1:6] %in% scan(text=x, what="", sep="," , quiet=TRUE) }))) 

     ID 1 2 3 4 5 6 
a,b,c,d 1 1 1 1 1 0 0 
a  2 1 0 0 0 0 0 
c,d,f,g 3 0 0 1 1 0 1