2016-05-31 122 views
2

我想創建一個使用R.
我有3列中的文件,如關聯矩陣:我怎樣才能創建一個關聯矩陣

# id x y 
# 1 A 22 2 
# 2 B 4 21 
# 3 C 21 360 
# 4 D 26 2 
# 5 E 22 58 
# 6 F 2 347 

而且我要像一個矩陣(不山坳和行名):

# 2 4 21 22 26 58 347 360 
# A 1 0 0 1 0 0 0 0 
# B 0 1 1 0 0 0 0 0 
# C 0 0 1 0 0 0 0 1 
# D 0 1 0 0 1 0 0 0 
# E 0 0 0 1 0 1 0 0 
# F 1 0 0 0 0 0 1 0 

數據

df1 <- structure(list(id = c("A", "B", "C", "D", "E", "F"), 
         x = c(22L, 4L, 21L, 26L, 22L, 2L), 
         y = c(2L, 21L, 360L, 2L, 58L, 347L)), 
       .Names = c("id", "x", "y"), class = "data.frame", row.names = c(NA, -6L)) 
+0

沿cbind.data.frame()貴矩陣的第一列以字母開頭? –

+0

yes, 在原始文件中,第一列是名稱 –

+1

在您的預期輸出中,行'D' col' 2'應該具有值'1'而不是'0',並且行'D' col'4'應該有'0'而不是'1'。休息是正確的。 –

回答

3

我們可以melt數據集,並與table

library(reshape2) 
table(melt(df1, id.var="id")[-2]) 

,或者嘗試使用僅base R

table(df1$id[row(df1[-1])], unlist(df1[-1])) 
# 2 4 21 22 26 58 347 360 
# A 1 0 0 1 0 0 0 0 
# B 0 1 1 0 0 0 0 0 
# C 0 0 1 0 0 0 0 1 
# D 1 0 0 0 1 0 0 0 
# E 0 0 0 1 0 1 0 0 
# F 1 0 0 0 0 0 1 0 
2

你可以用與table()功能

> table(cbind.data.frame(ID=df1$id,Result=c(df1$x,df1$y))) 
      Result 
    ID 2 4 21 22 26 58 347 360 
    A 1 0 0 1 0 0 0 0 
    B 0 1 1 0 0 0 0 0 
    C 0 0 1 0 0 0 0 1 
    D 1 0 0 0 1 0 0 0 
    E 0 0 0 1 0 1 0 0 
    F 1 0 0 0 0 0 1 0 
+0

它也可以。 謝謝你的幫助。 –

+0

@GersonOliveiraJunior太棒了!很高興知道。 –

+0

如何在Julia做這件事? 你也使用這種語言嗎? 謝謝! –

相關問題