在R中,如何将一行中的每个值转换为该行总和的比例?

时间:2015-04-15 18:28:07

标签: r matrix frame

我的数据如下:

1    55   41   61   73   75   75   84
2    18   29   26   27   24   21   14
3    19   15   18   28   26   16   13
4    26   36   36   42   32   22   21

我想将每行除以总数,将行转换为总数的比例:

mydata[1,]/sum(mydata[1,])

1 0.1185345 0.08836207 0.1314655 0.1573276 0.1616379 0.1616379 0.1810345

...用于整个数据集。我可以单独完成它们,如何为所有行执行此操作?

3 个答案:

答案 0 :(得分:4)

您可以尝试rowSums

mydata/rowSums(mydata)
#        V1         V2        V3        V4        V5        V7         V8
#1 0.1185345 0.08836207 0.1314655 0.1573276 0.1616379 0.1616379 0.18103448
#2 0.1132075 0.18238994 0.1635220 0.1698113 0.1509434 0.1320755 0.08805031
#3 0.1407407 0.11111111 0.1333333 0.2074074 0.1925926 0.1185185 0.09629630
#4 0.1209302 0.16744186 0.1674419 0.1953488 0.1488372 0.1023256 0.09767442

答案 1 :(得分:2)

尝试:

t(apply(df, 1, function(x) x/sum(x)))
            V2         V3        V4        V5        V6        V7         V8
[1,] 0.1185345 0.08836207 0.1314655 0.1573276 0.1616379 0.1616379 0.18103448
[2,] 0.1132075 0.18238994 0.1635220 0.1698113 0.1509434 0.1320755 0.08805031
[3,] 0.1407407 0.11111111 0.1333333 0.2074074 0.1925926 0.1185185 0.09629630
[4,] 0.1209302 0.16744186 0.1674419 0.1953488 0.1488372 0.1023256 0.09767442

或者:

sweep(df, 1, rowSums(df), "/")

答案 2 :(得分:1)

您可以使用apply

apply(mydata, 1, function(x) x/sum(x))