Reshape dataframe and create similarity matrix

前端 未结 2 1420
野性不改
野性不改 2021-01-22 04:10

I have a data table, and I try Reshaping it but it doesn\'t work, how do I do this:

I have a data table:

Name | Value
-------------
Bob  | 8,9,10
-------         


        
2条回答
  •  误落风尘
    2021-01-22 05:01

    The functions you are looking for are stack and contrasts.

    data<-list(bob=c(8,9,10),mike=c(2,3,4),sandr=c(5,6,7))
    
    as.data.frame(data)
    
      bob mike sandr
    1   8    2     5
    2   9    3     6
    3  10    4     7
    
    stack(data)
    
      values   ind
    1      8   bob
    2      9   bob
    3     10   bob
    4      2  mike
    5      3  mike
    6      4  mike
    7      5 sandr
    8      6 sandr
    9      7 sandr
    
    df<-stack(data)
    contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind]
    
          bob bob bob mike mike mike sandr sandr sandr
    bob     1   1   1    0    0    0     0     0     0
    bob     1   1   1    0    0    0     0     0     0
    bob     1   1   1    0    0    0     0     0     0
    mike    0   0   0    1    1    1     0     0     0
    mike    0   0   0    1    1    1     0     0     0
    mike    0   0   0    1    1    1     0     0     0
    sandr   0   0   0    0    0    0     1     1     1
    sandr   0   0   0    0    0    0     1     1     1
    sandr   0   0   0    0    0    0     1     1     1
    

    You can assign row names and column names and sort if desired

    im<-contrasts(df$ind,contrasts=FALSE)[df$ind,df$ind] 
    rownames(im)<-df$values
    colnames(im)<-df$values
    

提交回复
热议问题