将数据帧转换为R中的矩阵

时间:2016-07-07 12:25:58

标签: r

我有这个数据框:

Var1 var 2 var3

var1   var2   var3
A      B        1
B      C        2
B      A        3
D      C        4
B      D        5

我想将其转换为矩阵并使用R代码添加一列和一行来对与每个变量关联的值进行求和:

    A    B   C   D Total
A   0    1   0   0 1
B   3    0   2   5 10
C   0    0   0   0 0
D   0    0   4   0 4
T   3    1   6   5

你能建议我这样做吗?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

nms <- sort(unique(c(as.character(df$var1),as.character(df$var2))));
m <- matrix(vector(typeof(df$var3),1L),length(nms),length(nms),dimnames=list(nms,nms));
m[cbind(as.character(df$var1),as.character(df$var2))] <- df$var3;
m;
##   A B C D
## A 0 1 0 0
## B 3 0 2 5
## C 0 0 0 0
## D 0 0 4 0

如果as.character()var1输入列已经是字符向量,则var2强制可以省略。

数据

df <- data.frame(var1=c('A','B','B','D','B'),var2=c('B','C','A','C','D'),var3=c(1L,2L,3L,4L,
5L));

可以按如下方式添加边际总数:

m <- cbind(m,Total=rowSums(m));
m <- rbind(m,T=colSums(m));
m;
##   A B C D Total
## A 0 1 0 0     1
## B 3 0 2 5    10
## C 0 0 0 0     0
## D 0 0 4 0     4
## T 3 1 6 5    15