矩阵到数据框的行/列号

时间:2013-09-10 08:05:08

标签: r matrix dataframe

我在R中有一个10x10矩阵,称为run_off。我想将此矩阵转换为包含矩阵条目的数据框(顺序并不重要,尽管我更喜欢它由行填充)以及条目的行和列数作为数据框中的单独列,以便例如元素run_off[2,3]在数据框中有3列的行,第一行包含元素本身,第二行包含2,第三列包含3.

这是我到目前为止所做的:

run_off <- matrix(data = c(45630, 23350, 2924, 1798, 2007, 1204, 1298, 563, 777, 621,
                           53025, 26466, 2829, 1748, 732, 1424, 399, 537, 340, NA,
                           67318, 42333, -1854, 3178, 3045, 3281, 2909, 2613, NA, NA,
                           93489, 37473, 7431, 6648, 4207, 5762, 1890, NA, NA, NA,
                           80517, 33061, 6863, 4328, 4003, 2350, NA, NA, NA, NA,
                           68690, 33931, 5645, 6178, 3479, NA, NA, NA, NA, NA,
                           63091, 32198, 8938, 6879, NA, NA, NA, NA, NA, NA, 
                           64430, 32491, 8414, NA, NA, NA, NA, NA, NA, NA,
                           68548, 35366, NA, NA, NA, NA, NA, NA, NA, NA,
                           76013, NA, NA, NA, NA, NA, NA, NA, NA, NA)
                    , nrow = 10, ncol = 10, byrow = TRUE)

df <- data.frame()
for (i in 1:nrow(run_off)) {
  for (k in 1:ncol(run_off)) {
    claim <- run_off[i,k]
    acc_year <- i
    dev_year <- k
    df[???, "claims"] <- claim # Problem here
    df[???, "acc_year"] <- acc_year # and here
    df[???, "dev_year"] <- dev_year # and here


  }
}

dev_year表示矩阵条目的列号,acc_year表示行号。我的问题是我不知道用于数据框的正确索引。

1 个答案:

答案 0 :(得分:5)

我假设你对NA元素不感兴趣?您可以使用whicharr.ind = TRUE参数为每个值返回两列数组索引,并将cbind这个值返回给值,不包括NA值:

#  Get array indices
ind <- which( ! is.na(run_off) , arr.ind = TRUE ) 

#  cbind indices to values
out <- cbind( run_off[ ! is.na( run_off ) ] , ind )

head( as.data.frame( out ) )
#     V1 row col
#1 45630   1   1
#2 53025   2   1
#3 67318   3   1
#4 93489   4   1
#5 80517   5   1
#6 68690   6   1

如果要按行填写,请先在矩阵上使用t(),例如which( ! is.na( t( run_off ) ) , arr.ind = TRUE )(当你解决它时)。