我的数据如下:
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
...用于整个数据集。我可以单独完成它们,如何为所有行执行此操作?
答案 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))