2016-05-31 123 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做这件事? 你也使用这种语言吗? 谢谢! –

相关问题