gpt4 book ai didi

r - 根据上一行更改列值

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

我有一个这样的表:

| Group | Id | value |  
| :---- | :- | :---- |
| A | a | 0 |
| A | b | 1 |
| A | c | 2 |
| A | d | 0 |
| A | e | 1 |
| B | f | 0 |
| B | g | 1 |
| B | h | 2 |
| B | i | 0 |
| B | j | 1 |

我想添加一列,其值基于同一组下的前一行和当前行之间的比较。
该列以值 1 开始,如果前一个值大于当前值,则该列将递增,并且这种情况只能发生在同一组内。

| Group | Id | value | iteration |  
| :---- | :- | :---- | :-------- |
| A | a | 0 | 1 |
| A | b | 1 | 1 |
| A | c | 2 | 1 |
| A | d | 0 | 2 |
| A | e | 1 | 2 |
| B | f | 0 | 1 |
| B | g | 1 | 1 |
| B | h | 2 | 1 |
| B | i | 0 | 2 |
| B | j | 1 | 2 |

我试过这个:

df[ , iteration := if (value < shift(value)) shift(iteration) + 1 else shift(iteration), by = Group]

但它返回错误:

Warning message in if (value < shift(value)) shift(iteration) + 1 else shift(iteration): “the condition has length > 1 and only the first element will be used”

Error in if (value < shift(value)) shift(iteration) + 1 else shift(iteration): missing value where TRUE/FALSE needed

提前致谢

最佳答案

dplyr 解决方案:

library(dplyr)

df <- data.frame(Group=rep(c("A","B"), each=5),
ID=letters[1:10], value=c(0,1,2,0,1,0,1,2,0,1))

df %>% group_by(Group) %>%
mutate(Iteration = cumsum(ifelse(value >= lag(value, default=Inf), 0, 1)))

编辑:之前我写了“default = 1”,但只有当每个组中的值都以 0 开头时才有效。我将其替换为 Inf,这样即使第一个值不为 0,它也能工作。EDIT2:现在,当后续两行中的值相同时,它可以正常工作。

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

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