考虑以下 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
我想要一个额外的列来计算“值”已经连续为"is"的次数。因此,当 Value 为“No”时,新变量应始终为 0。如果是“No”之后第一次出现“Yes”,则将其设置为 1。如果接下来的观察结果也是"is",则应为 2 . 一旦"is"的链断断续续,下一个"is"的新变量将再次为 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
希望有人能帮助我。
最佳答案
您可以尝试使用“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
关于r - 计算R中变量连续重复的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954305/