我在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
表示行号。我的问题是我不知道用于数据框的正确索引。
答案 0 :(得分:5)
我假设你对NA元素不感兴趣?您可以使用which
和arr.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 )
(当你解决它时)。