4

我在 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行号。我的问题是我不知道用于数据框的正确索引。

4

1 回答 1

5

我假设您对 NA 元素不感兴趣?您可以使用whichandarr.ind = TRUE参数为每​​个值返回数组索引的两列矩阵,并将cbindthis 返回到值,不包括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 )(以及当您 cbind 时)。

于 2013-09-10T08:22:04.110 回答