我有一个制表符分隔文件,如
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中解决这个问题? 谢谢,
答案 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
包感兴趣,将数据读取为加权边列表。