【问题标题】:problem in changing matrix to a data frame with same dimensions将矩阵更改为具有相同维度的数据框的问题
【发布时间】:2026-02-17 21:05:01
【问题描述】:

我尝试从矩阵创建数据框;但是,与主矩阵相比,结果具有不同的维度。请看下面我的代码:

out <- table(UL_Final$Issue_Year, UL_Final$Insured_Age_Group)
out <- out/rowSums(out)  #changing all numbers to ratio

结果是一个 12 乘 7 的矩阵:

              1           2           3           4           5           6           7
  1387 0.165137615 0.036697248 0.229357798 0.321100917 0.201834862 0.018348624 0.027522936
  1388 0.149222065 0.110325318 0.197312588 0.342291372 0.136492221 0.055162659 0.009193777
  1389 0.144979508 0.101946721 0.222848361 0.335553279 0.138575820 0.046362705 0.009733607
  1390 0.146991622 0.120030465 0.191622239 0.336024372 0.142269612 0.052551409 0.010510282
  1391 0.165462754 0.111794582 0.185835214 0.321049661 0.135553047 0.064503386 0.015801354
  1392 0.162399144 0.109583402 0.165321917 0.317388441 0.146344476 0.076115594 0.022847028
  1393 0.181602139 0.116447173 0.151104070 0.325131201 0.148628577 0.062778493 0.014308347
  1394 0.163760504 0.098529412 0.142489496 0.323792017 0.178728992 0.076050420 0.016649160
  1395 0.137097032 0.094699511 0.128981757 0.321320170 0.197610147 0.098245950 0.022045433
  1396 0.167187958 0.103851041 0.112696706 0.293202033 0.200689082 0.099306031 0.023067149
  1397 0.193250090 0.130540713 0.108114843 0.270743930 0.186411584 0.091364656 0.019574185
  1398 0.208026156 0.147573562 0.100455157 0.249503173 0.191935380 0.083338676 0.019167895

然后使用下面的代码:

out <- data.frame(out)

但是,结果将更改为 84 x 3 的数据框和维度

   Var1 Var2        Freq
1  1387    1 0.165137615
2  1388    1 0.149222065
3  1389    1 0.144979508
4  1390    1 0.146991622
5   ....     .......

我不知道为什么会这样。但是在另一种情况下,正如我在下面解释的那样,我没有看到这种奇怪的行为。在另一种情况下,我使用下面的代码来计算另一个变量的另一个比率:

out <- table( df_select$Insured_Age_Group,df_select$Policy_Status)
out <- cbind(out, Ratio = out[,2]/rowSums(out))

结果是:

  Issuance Surrended     Ratio
1    31046      5735 0.1559229
2    20039      4409 0.1803420
3    20399      9228 0.3114726
4    48677     17216 0.2612721
5    30045      8132 0.2130078
6    13947      4106 0.2274414
7     3157      1047 0.2490485

现在,如果我们使用下面的代码(@Ronak Shah):

out <- data.frame(out) %>% mutate(x = row_number())

结果是:

  Issuance Surrended     Ratio x
1    31046      5735 0.1559229 1
2    20039      4409 0.1803420 2
3    20399      9228 0.3114726 3
4    48677     17216 0.2612721 4
5    30045      8132 0.2130078 5
6    13947      4106 0.2274414 6
7     3157      1047 0.2490485 7

如您所见,结果现在是一个具有相同维度的数据框。谁能解释为什么会这样?

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    请参阅?table 以获得解释:

    从类“table”继承的对象的as.data.frame方法可用于将列联表的基于数组的表示转换为包含分类因子和相应条目的数据框(后者作为由 responseName 命名的组件)。这是 xtabs 的倒数。

    一种解决方法是使用as.data.frame.matrix

    m <- table(mtcars$carb, mtcars$gear)
    as.data.frame(m)
    #    Var1 Var2 Freq
    # 1     1    3    3
    # 2     2    3    4
    # 3     3    3    3
    # 4     4    3    5
    # 5     6    3    0
    # 6     8    3    0
    # 7     1    4    4
    # 8     2    4    4
    # 9     3    4    0
    # 10    4    4    4
    # 11    6    4    0
    # 12    8    4    0
    # 13    1    5    0
    # 14    2    5    2
    # 15    3    5    0
    # 16    4    5    1
    # 17    6    5    1
    # 18    8    5    1
    as.data.frame.matrix(m)
    #   3 4 5
    # 1 3 4 0
    # 2 4 4 2
    # 3 3 0 0
    # 4 5 4 1
    # 6 0 0 1
    # 8 0 0 1
    

    【讨论】: