gpt4 book ai didi

r - 如何计算和测试总和并重复操作

转载 作者:行者123 更新时间:2023-12-04 09:33:54 25 4
gpt4 key购买 nike

我需要测试每个因素的“比索”值(参见下面的复制代码)。一个因子是否达到“比索”总和的 50%,每个因子的值都应该粘贴到一个新的对象“结果”中,否则,R 应该评估哪个因子具有“比索”的最低聚合值,并考虑再次汇总“比索”的下一列中的因子。基本上,这个过程替换了下一个因素的最低得分因素。该过程应重复,直到因子超过 50% 阈值。所以我的问题是,我从哪里开始?

set.seed(51)
Data <- sapply(1:100, function(x) sample(1:10, size=5))
Data <- data.frame(t(Data))
names(Data) <- letters[1:5]
Data$peso <- sample(0:3.5, 100, rep=TRUE)

它应该像
If your first two rows are: 
a b c d e peso
8 2 3 7 9 1
8 3 4 5 7 3
9 7 4 10 1 2
10 3 4 5 7 3

What would you like for the total?
Totals_08 = 4
Totals_09 = 2
Totals_10 = 3
etc?

因此,因子 8 获得了更大的份额 4/(4+2+3) = 0.4444444,但在 a 轮中没有达到 50% 的阈值。因此,我需要更多的东西:重复聚合,但现在考虑“b”列中的因子 7 而不是“a”列中的因子 9,因为它在第一轮中获得了最低的聚合值。

最佳答案

目前尚不清楚您是否已经拥有因素列表。如果您没有它,而是从数据集中获取它,您可以通过几种不同的方式获取它:

# Get a list of all the factors
myFactors <- levels(Data[[1]]) # If actual factors.
myFactors <- sort(unique(unlist(Data))) # Otherwise use similar to this line

然后要计算每个因素的总计,您可以执行以下操作
Totals <- 
colSums(sapply(myFactors, function(fctr)
# calculate totals per fctr
as.integer(Data$peso) * rowSums(fctr == subset(Data, select= -peso))
))

names(Totals) <- myFactors

这使
Totals
# 1 2 3 4 5 6 7 8 9 10
# 132 153 142 122 103 135 118 144 148 128


下一个:
我不确定之后是否要与比索的总和或总数的总和进行比较。以下是两个选项,分为几个步骤:
# Calculate the total of all the Totals:
TotalSum <- sum(Totals)

# See percentage for each:
Totals / TotalSum
Totals / sum(as.integer(Data$peso))

# See which, if any, is greater than 50%
Totals / TotalSum > 0.50
Totals / sum(as.integer(Data$peso)) > 0.50

# Using Which to identify the ones you are looking for
which(Totals / TotalSum > 0.50)
which(Totals / sum(as.integer(Data$peso)) > 0.50)

关于比索抽样的注意事项

您采集了 0:3.5 的样本,然而, x:y序列只给出整数。
如果你想要分数,你可以使用 seq()或者你可以取一个更大的序列,然后适本地划分:
option1 <-  (0:7) / 2
option2 <- seq(from=0, to=3.5, by=0.5)

如果你想要 0:3 的整数和 3.5 的值,那么使用 c()
 option3 <- c(0:3, 3.5)

关于r - 如何计算和测试总和并重复操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com