计算乘法列中每个值的百分比。基于使用 R 的每列中的最大值
Calculating percentage for each value in multiply columns. based on maximum value in each column using R
我试图形成一个循环,它从每列中获取最大值,然后用它来计算每列中其他值的百分比。以前有人问过类似的问题,但是给出的解决方案是计算百分比与我需要的相反。
我的df:
a
b
c
d
1115.68
67.52
151.13
183.32
1083.16
53.75
136.70
202.56
1076.69
56.07
157.77
196.43
期望输出:
a
b
c
d
100.00
100.00
95.79
90.50
97.09
79.61
86.65
100.00
96.51
83.05
100.00
96.97
当前输出,我以相反的方式得到百分比:
a
b
c
d
100.00
6.05
13.55
16.43
100.00
4.96
12.62
18.70
100.00
5.21
14.65
18.24
我使用的代码是这样的:
output <- df
for (i in 1:nrow(df)) {
highvalue <- max(df[i, 1:4])
for (j in 1:4) {
output[i, j] <- df[i, j] * 100/highvalue
}
}
output
代码有什么问题?
您在行中找到最大值,而不是在列中。循环版本:
output <- df
for (i in 1:ncol(df)) {
highvalue <- max(df[, i])
output[, i] <- output[, i] / highvalue * 100
}
但是你可以使用好的代码版本:
library(dplyr)
output <- df / df %>% lapply(max) * 100
我试图形成一个循环,它从每列中获取最大值,然后用它来计算每列中其他值的百分比。以前有人问过类似的问题,但是给出的解决方案是计算百分比与我需要的相反。
我的df:
a | b | c | d | |
---|---|---|---|---|
1115.68 | 67.52 | 151.13 | 183.32 | |
1083.16 | 53.75 | 136.70 | 202.56 | |
1076.69 | 56.07 | 157.77 | 196.43 |
期望输出:
a | b | c | d | |
---|---|---|---|---|
100.00 | 100.00 | 95.79 | 90.50 | |
97.09 | 79.61 | 86.65 | 100.00 | |
96.51 | 83.05 | 100.00 | 96.97 |
当前输出,我以相反的方式得到百分比:
a | b | c | d | |
---|---|---|---|---|
100.00 | 6.05 | 13.55 | 16.43 | |
100.00 | 4.96 | 12.62 | 18.70 | |
100.00 | 5.21 | 14.65 | 18.24 |
我使用的代码是这样的:
output <- df
for (i in 1:nrow(df)) {
highvalue <- max(df[i, 1:4])
for (j in 1:4) {
output[i, j] <- df[i, j] * 100/highvalue
}
}
output
代码有什么问题?
您在行中找到最大值,而不是在列中。循环版本:
output <- df
for (i in 1:ncol(df)) {
highvalue <- max(df[, i])
output[, i] <- output[, i] / highvalue * 100
}
但是你可以使用好的代码版本:
library(dplyr)
output <- df / df %>% lapply(max) * 100