r - 为列的连续值创建标志
问题描述
我正在尝试使用 R 获取按品牌、区域、日期分组的数量列中连续为零的数量计数。我如何获得计数?
我已经尝试过 rle , rleid 函数,但无法找到解决方案
实际数据样本:
structure(list(Brand = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("B1", "B2"), class = "factor"),
Area = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("A1", "A2"), class = "factor"),
Date = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 8L, 1L, 2L, 3L,
4L, 5L, 6L, 7L, 8L), .Label = c("4/1/2019", "4/2/2019", "4/3/2019",
"4/4/2019", "4/5/2019", "4/6/2019", "4/7/2019", "4/8/2019"
), class = "factor"), QTY = c(345L, 3455L, 34L, 23L, 0L,
0L, 677L, 883L, 383L, 43L, 3L, 4L, 0L, 0L, 0L)), .Names = c("Brand",
"Area", "Date", "QTY"), row.names = c(NA, -15L), class = c("data.table",
"data.frame"))
所需输出 2
谢谢
解决方案
获得所需输出的一种简单方法是:
require(dplyr)
data %>% group_by(Brand, Area) %>%
mutate(flag=ifelse(QTY==0 & (lag(QTY)==0 | lead(QTY)==0),1,0),
zcount=ifelse(QTY==0,sum(flag),NA))
结果:
# A tibble: 15 x 6
# Groups: Brand, Area [2]
Brand Area Date QTY flag zcount
<fct> <fct> <fct> <int> <dbl> <dbl>
1 B1 A1 4/1/2019 345 0 NA
2 B1 A1 4/2/2019 3455 0 NA
3 B1 A1 4/3/2019 34 0 NA
4 B1 A1 4/4/2019 23 0 NA
5 B1 A1 4/5/2019 0 1 2
6 B1 A1 4/6/2019 0 1 2
7 B1 A1 4/8/2019 677 0 NA
8 B2 A2 4/1/2019 883 0 NA
9 B2 A2 4/2/2019 383 0 NA
10 B2 A2 4/3/2019 43 0 NA
11 B2 A2 4/4/2019 3 0 NA
12 B2 A2 4/5/2019 4 0 NA
13 B2 A2 4/6/2019 0 1 3
14 B2 A2 4/7/2019 0 1 3
15 B2 A2 4/8/2019 0 1 3
推荐阅读
- c++ - 向量的内存位置不连续
- php - 尝试在 Arch 上升级 DokuWiki 农场设置,wiki 现在完全被冲洗
- python - 使用API直接调用google cloudfunction
- c# - 执行 INSERT 时出现 SQL 错误:'s' 附近的语法不正确
- javascript - 如何在登录页面上添加 Android 和 iOS 设备图像
- android - 当 setHasFixedSize(true) 时,Firebase recyclerview 不显示任何内容
- vue.js - 当你不能使用计算属性时,什么是一个好的 vue.js 设计模式可以避免直接改变 props
- ibeacon - iOS CLRegion 监控在一天后停止工作
- java - Gradle build 找不到方法 ResponseEntity.of(object)
- php - 使用构造函数创建 DateTime 更改时间