制表符分隔为方形矩阵

时间:2010-08-04 04:48:47

标签: r

我有一个制表符分隔文件,如

A   B   0.5
A   C   0.75
B   D   0.2

我想将其转换为方阵,如

       A      B      C       D
A      0     0.5    0.75     0
B             0      0      0.2 
C                    0       0
D                            0

我怎样才能在R中解决这个问题? 谢谢,

3 个答案:

答案 0 :(得分:7)

如果数据框中的数据包含以下列名称:

Var1    Var2    value

你可以使用

xtabs(value ~ Var1 + Var2, data = df)

请参阅plyr包以获取更多常规数据重塑功能。

答案 1 :(得分:3)

另一种方法(不像JoFrhwld那样优雅)

df<- read.table(textConnection("
Var1    Var2    value
A   B   0.5
A   C   0.75
B   D   0.2
"),header = T)


lev = unique(c(levels(df$Var1),levels(df$Var2)))
A = matrix(rep(0,length(lev)^2),nrow=length(lev))
colnames(A) = lev
rownames(A) = lev
apply(df,1,function(x) A[x[1],x[2]]<<-as.numeric(x[3]))

> A
  A   B    C   D
A 0 0.5 0.75 0.0
B 0 0.0 0.00 0.2
C 0 0.0 0.00 0.0
D 0 0.0 0.00 0.0
> 

答案 2 :(得分:0)

我猜这是一个图的加权邻接矩阵。如果是这样,您可能会对igraph包感兴趣,将数据读取为加权边列表。