如何计算 R 中 table 的百分比
How to calculate percentage in a table in R
我有一个 table,我想计算每个值占每列总和的百分比。我的意思是我想要这些数据:
(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))
有人可以帮忙吗?
非常感谢
您可以像下面那样尝试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
在 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"))
以下任何一项也可以:
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.84211
我有一个 table,我想计算每个值占每列总和的百分比。我的意思是我想要这些数据:
(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))
有人可以帮忙吗? 非常感谢
您可以像下面那样尝试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
在 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"))
以下任何一项也可以:
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.84211