【发布时间】:2019-01-18 10:37:16
【问题描述】:
我有一张这样的桌子:
| 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]
但它返回错误:
if (value 1 并且只有第一个 元素将被使用”
if (value
提前致谢
【问题讨论】:
-
if (...)仅适用于长度为一的条件。一个data.table翻译user3640617的答案是setDT(df)[, iter := rleid(cumsum(shift(value, fill = 0) > value)), by=Group]
标签: r dataframe data.table compare