我有一个表,我想计算每个值在每一列之和上的百分比。我的意思是我想要这些数据
(30/35)x100,(0/35)x100,(5/35)x100为第一列,(3/29)x100,(24/29)x100,(2/29)x100和(5/19)x100,(7/19)x100,(7/19)x100为第三列。
df
Donkey Horse Hybrid
Donkey 30 3 5
Horse 0 24 7
Hybrid 5 2 7我使用了这个函数,但是计算不正确。
apply(df, 2,function(x,y) (x/y)*100, colSums(df))有人能帮忙吗?事先非常感谢
发布于 2021-07-13 20:02:42
您可以尝试如下所示的propotions
> proportions(as.matrix(df), 2) * 100
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211或者使用colSums + col,如下所示
> df / colSums(df)[col(df)] * 100
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211发布于 2021-07-13 20:04:02
在OP的代码中,语法应该是
apply(df, 2, function(x) x/sum(x) * 100)
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211数据
df <- structure(list(Donkey = c(30L, 0L, 5L), Horse = c(3L, 24L, 2L
), Hybrid = c(5L, 7L, 7L)), class = "data.frame", row.names = c("Donkey",
"Horse", "Hybrid"))发布于 2021-07-13 20:06:11
下列任何一项也可发挥作用:
prop.table(as.matrix(df), 2)*100
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211
sweep(df, 2, colSums(df), '/')*100
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211
t(t(df)/ colSums(df))*100
Donkey Horse Hybrid
Donkey 85.71429 10.344828 26.31579
Horse 0.00000 82.758621 36.84211
Hybrid 14.28571 6.896552 36.84211https://stackoverflow.com/questions/68368680
复制相似问题