【发布时间】:2016-06-30 14:36:39
【问题描述】:
我有这个数据框 df1。
User|Date|Index|
a |1 |1 |
a |1 |2 |
a |1 |3 |
a |1 |0 |
a |1 |5 |
a |1 |6 |
a |2 |0 |
b |4 |1 |
b |4 |2 |
b |4 |3 |
我想通过以下方式更新索引列:
- 按用户、日期对数据进行分组;
- 假设行的顺序正确;
- 遍历列Index,当找到0值时,将其更新为1,并更正以下几行,在上一行的基础上增加1,直到找到另一个0。
我已将范围缩小到此,但我不确定如何完成替换部分以完成我想要的操作。
df1 %>%
group_by(User, Date) %>%
mutate(Index = replace(Index,)
谁能帮帮我?
编辑: 上面的数据框是一个简化。这是代码。
df1 <-structure(list(User = c(2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,3),
Date = c(16864, 16864, 16864, 16864, 16864, 16879, 16879,16879, 16879, 16879, 16879, 16879, 16879, 16879),
Index = c(16,17, 0, 19, 20, 1, 2, 3, 0, 5, 0, 0, 8, 9)),
class = "data.frame", .Names = c("User","Date", "Index"), row.names = c(NA, -14L))
这是目前的样子:
User|Date |Index|
2 |16864 |16 |
2 |16864 |17 |
2 |16864 |0 |
2 |16864 |19 |
2 |16864 |20 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
3 |16879 |0 |
3 |16879 |5 |
3 |16879 |0 |
3 |16879 |0 |
3 |16879 |8 |
3 |16879 |9 |
想要的输出是:
User|Date |Index|
2 |16864 |16 |
2 |16864 |17 |
2 |16864 |1 |
2 |16864 |2 |
2 |16864 |3 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |1 |
3 |16879 |1 |
3 |16879 |2 |
3 |16879 |3 |
【问题讨论】:
-
你能显示预期的输出吗?也请有一个look at this link 并修改
-
是否有理由不简单地将零替换为 1 作为第一步?如果您要替换所有这些,我不明白为什么需要迭代地完成。
-
0 没有特殊原因。我想它可能已经从 1 开始了。
-
已编辑。感谢您提供关于可重现 R 代码 @Sotos 的链接