使用文件数据填充矩阵

时间:2018-03-08 15:10:40

标签: r file matrix

我有一个文件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数据显示

2 个答案:

答案 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