用一个限制在R中舍入

问题描述 投票:1回答:2

我有这个数据集:

B <- c(60.65, 25.25)
D <- c(10, 10)
E <- c(30.35, 65.75)
Total <- c(100,100) 

我想围绕B+D+E = 100的圆柱

非常感谢您的帮助。

问候!

r rounding
2个回答
2
投票

我假设你问的是如何缩放来自BDE的条目,以便它们总结Total。在我看来,“圆形”这个词在这里并没有多大意义。

如果是这种情况,您可以执行以下操作

df <- data.frame(B, D, E) * Total / rowSums(data.frame(B, D, E))
df
#        B       D        E 
#1 60.0495 9.90099 30.04950 
#2 25.0000 9.90099 65.09901

然后data.frame df包含缩放的列向量BDE。我们可以确认组件总和为Total

rowSums(df)
#[1] 100 100

0
投票

行值的总和接近100但是简单的舍入并不总是给出100,例如,第一排。因此,在舍入之前,让我们执行缩放,将行值的总和从“关闭”更改为精确等于100.但是,可能会出现这种情况,即使在缩放后舍入也不会使总和等于100,所以让我们通过更改其中一列的值来更正此问题:

# additional value 100/3
B <- c(60.65, 25.25, 100/3)
D <- c(10, 10, 100/3)
E <- c(30.35, 65.75, 100/3)
Total <- c(100, 100, 100) 

df <- round(data.frame(B, D, E)*100/rowSums(data.frame(B, D, E)))

df
#   B  D  E
#1 60 10 30
#2 25 10 65
#3 33 33 33

rowSums(df)
#[1] 100 100  99

df[,3] <- 100 - rowSums(df[,1:2])

df
#   B  D  E
#1 60 10 30
#2 25 10 65
#3 33 33 34

rowSums(df)
#[1] 100 100 100
© www.soinside.com 2019 - 2024. All rights reserved.