gpt4 book ai didi

r - 优化每行数据表的调用函数

转载 作者:行者123 更新时间:2023-12-05 03:17:11 25 4
gpt4 key购买 nike

我们需要优化一个程序来对每个“nb_student”进行处理根据值编号,生成与输入的值相对应的列表编号。一旦得到这个列表,另一个程序就必须按照排名规则进行计数。

排序规则

如果学生人数:

  • 小于 1 => 递增 A 组
  • 在 1 和 3 之间 => 增加 B 组
  • 在 3 和 4 之间 => 增加组 C
  • 大于 4 => 递增组 D

初始数据

  "category_name" "nb_student"    
A 6,00000
A 10,00000
B 12,0000
C 74,0000
D 6,00000

初始化数据代码

DT = data.table(
category_name = c("A","B","C","D"),
nb_student = c(6,12,74,6)
)

每一行的函数

treatment_group <- function(nb_student){
nb_group_A = nb_group_B = nb_groupe_C = nb_groupe_D <- 0

limit_1 <- 1
limit_2 <- 3
limit_3 <- 4

list <- runif(nb_student, 0, 5)

for (i in list) {
if(i < limit_1){
nb_group_A <- nb_group_A + 1
}else if(i > limit_1 & i < limit_2){
nb_group_B <- nb_group_B + 1
}else if(i > limit_3){
nb_groupe_C <- nb_groupe_C + 1
}else {
nb_groupe_D <- nb_groupe_D + 1
}
}

list(nb_group_A, nb_group_B, nb_groupe_C, nb_groupe_D)
}

结果

DT[ , c("group A", "group B", "group C", "group D") := tratment_group(nb_student), by = seq_len(nrow(DT))]

最后的结果一定要和这张表匹配

"category_name" "nb_student"           "group A"       "group B"       "group C"     "group D"
A 6,00000 0,00000 2,00000 4,00000 0,00000
A 10,00000 3,00000 3,00000 4,00000 0,00000
B 12,0000 2,00000 9,00000 0,00000 1,00000
C 74,0000 14,0000 29,0000 15,0000 16,0000
D 6,00000 0,00000 1,00000 3,00000 2,00000

此代码有效,但我想优化它以运行 200000 行。也许使用并行化?

最佳答案

我猜你可以试试 findInterval

set.seed(1)
DT[
,
c(
.SD,
as.data.frame(
t(as.matrix(table(
factor(
findInterval(runif(nb_student, 0, 5), c(1, 3, 4)) + 1,
levels = 1:4,
label = paste("group", LETTERS[1:4])
)
)))
)
),
category_name
]

给出

   category_name nb_student group A group B group C group D
1: A 6 0 4 0 2
2: B 12 2 3 5 2
3: C 74 11 35 17 11
4: D 6 0 2 3 1

关于r - 优化每行数据表的调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74241285/

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