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

In R, how do I transform each value in a row to the proportion of sum total of that row?

我有这样的数据:

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

...对于整个数据集。我可以单独进行,如何对所有行进行?

尝试:

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), "/")

你可以试试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

您可以使用apply

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