gpt4 book ai didi

r - 在 R : recursive function that operates on its own previous result 中应用

转载 作者:行者123 更新时间:2023-12-02 07:59:03 25 4
gpt4 key购买 nike

如何应用一个在按行操作时可以“看到”前面结果的函数?

这种情况经常出现,但我当前的问题需要学生计算总计,如果总计未达到 5,则重置。

示例数据:

> df

row Student Absent Consecutive.Absences
1 A 0 0
2 A 1 1
3 A 1 2
4 A 0 0 <- resets to zero if under 5
5 A 0 0
6 A 1 1
7 A 1 2
8 A 1 3
9 B 1 1 <- starts over for new factor (Student)
10 B 1 2
11 B 0 0
12 B 1 1
13 B 1 2
14 B 1 3
15 B 1 4
16 B 0 0
17 B 1 1
18 B 1 2
19 B 1 3
20 B 1 4
21 B 1 5
22 B 0 5 <- gets locked at 5
23 B 0 5
24 B 1 6
25 B 1 7

我尝试过使用一个巨大的移位向量矩阵来做到这一点。

我尝试使用 apply 系列函数执行此操作,其中一半不执行任何操作,另一半占用 16GB RAM 并使我的计算机崩溃。

我尝试过直接循环,需要 4 个多小时(这是一个大数据集)

令我困扰的是,这在 Excel 中是多么容易。通常,R 在速度和可写性方面都优于 Excel,这让我相信我在这里遗漏了一些基本的东西。

甚至忘记更具挑战性的(“锁定在 5”)功能,我什至无法获得重置的 cumsum。我无法想到将 ave 分组为这样的因素组合:

Consecutive.Absences = ave(Absent, ..., cumsum)

显然,对学生进行分组只会给出累计缺勤总数 - 它会“记住” child 由于 ave 中的拆分和重组而缺勤的情况。

正如我所说,我不知道如何在 R 中做的核心是:
如何应用一个在按行操作时可以“看到”前面结果的函数?

在 Excel 中这很容易:

C3 = IF($A3=$A2,$B3+$C2,$B3)*$B3

此 Excel 函数的显示没有 5 缺席锁定,以便于阅读。

一旦我弄清楚如何应用一个函数来查看 R 中同一函数的先前结果,我就能弄清楚其余的事情。

提前感谢您的帮助——这对我的很多应用程序都非常有用!

说实话,山姆

<小时/>

更新:
感谢大家提出如何确定学生是否连续缺勤 5 次的想法!

但是,这在数据库的 STUDENTS 表中很容易做到。我需要知道的是出勤记录本身中学生连续缺勤的次数,例如“在计算其他汇总统计数据时,我们是否计算此特定出勤记录?”

最佳答案

如果您希望在使用前一个元素的值的同时将函数应用于向量中的每个元素,您可能需要查看“Reduce”,并将累积参数设置为 True

这是一个例子:

##define your function that takes two parameters
##these are the 'previous' and the 'current' elements
runSum <- function(sum, x){
res = 0
if (x == 1){
res = sum + 1
}
else if (x == 0 & sum < 5){
res = 0
}
else{
res = sum
}
res
}

#lets look at the absent values from subject B
x = c(1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1)

Reduce(x=x, f=runSum, accumulate=T)
# [1] 1 2 0 1 2 3 4 0 1 2 3 4 5 5 5 6 7

关于r - 在 R : recursive function that operates on its own previous result 中应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16024046/

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