考虑以下MWE:
df <- data.frame(Day=1:10, Value = c("Yes","No","Yes", "Yes", "Yes",
"No", "No", "Yes","Yes", "No"))
Day Value
1 Yes
2 No
3 Yes
4 Yes
5 Yes
6 No
7 No
8 Yes
9 Yes
10 No
Run Code Online (Sandbox Code Playgroud)
我想要一个额外的列来计算"值"已连续"是"的次数.因此,当Value为'No'时,新变量应始终为0.如果是'No'之后第一次出现'Yes',则将其设置为1.如果那么下一个观察结果也是肯定的,它应该是2一旦"是"链断断续续,下一个"是"的新变量将再次为1.所以我的数据框应如下所示:
Day Value Count
1 Yes 1
2 No 0
3 Yes 1
4 Yes 2
5 Yes 3
6 No 0
7 No 0
8 Yes 1
9 Yes 2
10 No 0
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮助我.
您可以尝试使用“data.table”,特别是该rleid功能:
例子:
library(data.table)
as.data.table(df)[, count := sequence(.N), by = rleid(Value)][Value == "No", count := 0][]
# Day Value count
# 1: 1 Yes 1
# 2: 2 No 0
# 3: 3 Yes 1
# 4: 4 Yes 2
# 5: 5 Yes 3
# 6: 6 No 0
# 7: 7 No 0
# 8: 8 Yes 1
# 9: 9 Yes 2
# 10: 10 No 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |