将矩阵变换为具有相同维度的数据帧的r问题



我试图从矩阵中创建一个数据帧;然而,与主矩阵相比,结果具有不同的维度。请参阅下面我的代码:

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乘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

正如您所看到的,现在的结果是具有相同维度的数据帧。有人能解释为什么会发生这种情况吗?

有关解释,请参阅?table

从类"继承对象的CCD_ 2方法;表";可用于将列联表的基于数组的表示转换为包含分类因子和相应条目的数据帧(后者是由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

最新更新