use*_*626 4 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
}
}
Run Code Online (Sandbox Code Playgroud)
dev_year指矩阵条目的列号和acc_year行号。我的问题是我不知道用于数据帧的正确索引。
我假设您对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
Run Code Online (Sandbox Code Playgroud)
t()如果which( ! is.na( t( run_off ) ) , arr.ind = TRUE )要按行填充(例如(以及绑定时)),请先在矩阵上使用。