我有一个文件example.csv包含三列
A, A, 0
A, B, 0.05
A, C, 0.04
B, A, 0.001
B, B, 0.000
B, C, 0.05
C, A, 0.04
C, B, 0.05
C, C, 0.00
我定义了一个3 x 3矩阵并读取文件
mat <- matrix(NA, nrow=3, ncol=3)
df = read.csv(file="~/Desktop/example.csv", head = FALSE, sep=",")
将表格作为矩阵
阅读inp.mtx <- as.matrix(df)
inp.mtx
> inp.mtx
V1 V2 V3
[1,] "A" "A" "0.000"
[2,] "A" "B" "0.050"
[3,] "A" "C" "0.040"
[4,] "B" "A" "0.001"
[5,] "B" "B" "0.000"
[6,] "B" "C" "0.050"
[7,] "C" "A" "0.040"
[8,] "C" "B" "0.050"
[9,] "C" "C" "0.000"
mat显示为
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA NA NA
[3,] NA NA NA
如何将前两列填充为索引并填写相应的值?因此矩阵如下所示。
A B C
A 0.000 0.05 0.04
B 0.001 0.000 0.05
C 0.04 0.05 0.00
当我尝试填充时,我弄乱了列和行。有时错误为
Error in mat[inp.mtx[, 1:2]] <- inp.mtx[, 3] : subscript out of bounds
感谢您的投入!
编辑:inp.mtx数据显示
答案 0 :(得分:0)
这将给出正确的答案。请注意,t()
正在转置数据,以便按上述方式旋转矩阵。
inp.df<- read.table(text =
"V1 V2 V3
1 A A 0.000
2 A B 0.050
3 A C 0.040
4 B A 0.001
5 B B 0.000
6 B C 0.050
7 C A 0.040
8 C B 0.050
9 C C 0.000", header =TRUE)
t(matrix(inp.df$V3, nrow=3, ncol =3, dimnames= list(c("A", "B", "C"),c("A", "B", "C") )))
A B C
A 0.000 0.05 0.04
B 0.001 0.00 0.05
C 0.040 0.05 0.00
答案 1 :(得分:0)
您可以使用基准R中的main
创建一个表格,其中xtabs
作为rownames,V1
作为列名。您填写V2
,即V3
。这将创建一个类V3~V1+V2
的对象。由于从表中子集甚至调用列不容易,我们通过table
函数将其转换为数据帧。最后,如果我们愿意,我们可以将结果转换为矩阵。
as.data.frame.matrix