我有一个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]
}
}
答案 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
(显式或隐式)。例如,您可以使用rowSums
或apply
。这两者都将隐含地强制转换为矩阵。
# result of apply and rowSums is always matrix
df / apply(df, 1, sum) * 100
df / rowSums(df) * 100