gpt4 book ai didi

r - 根据多列中后续行中的值更新行

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

我有一个包含数千行的数据框并选择了 2 列,例如:

col1  col2
2 11
3 11
4 12
4 1
5 1
6 2
1 3
1 3
2 4

在每个列中的某个点的值重置为 1,然后在再次重置之前继续累积到某个值。每列中的复位点相互独立。我需要的是一个检测重置和更新值的函数,在此重置之前使用从 -1 到 -3 的负值 - 对于每列取决于其自己的重置。所以需要的结果是:
col1  col2
2 -3
3 -2
4 -1
-3 1
-2 1
-1 2
1 3
1 3
2 4

任何建议如何做到这一点? (Dplyr 解决方案将是最受欢迎的)。

最佳答案

另一个基本的 R 解决方案:

mydf[] <- lapply(mydf, function(x) {
w <- which(x == 1 & c(0, head(x,-1)) != 1)
x[c(sapply(w, `-`, 3:1))] <- -3:-1
x
})

这使:

> mydf
col1 col2
1 2 -3
2 3 -2
3 4 -1
4 -3 1
5 -2 1
6 -1 2
7 1 3
8 1 3
9 2 4


旧答案:
mydf[] <- lapply(mydf, function(x) {
w <- which(x == 1)
i <- c(0, diff(w)) != 1
w <- c(sapply(w[i], `-`, 3:1))
x[w] <- -3:-1
x
})

关于r - 根据多列中后续行中的值更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50230630/

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