高效的类似R的方法来计算数据帧中所有元素的基于行的百分比

时间:2016-08-24 07:33:36

标签: r

我有一个data.frame的绝对值。因为我想以百分比显示它们,我必须计算它。每行都是100%。

我想知道我的解决方案是否足够好,或者是否有更像R的方式?

df = data.frame(a=sample(100:1000, 3), b=sample(10:500, 3), c=sample(4:300, 3))
df_abs <- df
for (row in rownames(df)) {
    s = sum(df[row,])
    for (col in colnames(df)) {
        df[row, col] <- 100 / s * df[row, col]
        }
}

1 个答案:

答案 0 :(得分:3)

由于您的data.frame包含所有数值,您可以将其转换为矩阵,然后使用prop.table(比例表)。

m <- as.matrix(df)
prop.table(m, margin = 1) * 100
#             a         b         c
# [1,] 54.76948 37.758347  7.472178
# [2,] 49.86150  8.864266 41.274238
# [3,] 16.66667 56.641604 26.691729

大多数(全部?)针对此类问题的惯用解决方案将涉及将data.frame强制转换为matrix(显式或隐式)。例如,您可以使用rowSumsapply。这两者都将隐含地强制转换为矩阵。

# result of apply and rowSums is always matrix
df / apply(df, 1, sum) * 100
df / rowSums(df) * 100