r - 有没有办法在 R 中的数据间隙之间对列中的值进行分组?
问题描述
当数据是连续的时,我想将我的数据分组到不同的块中。试图从这样的虚拟数据中获取组列:
a b group
<dbl> <dbl> <dbl>
1 1 1 1
2 2 2 1
3 3 3 1
4 4 NA NA
5 5 NA NA
6 6 NA NA
7 7 12 2
8 8 15 2
9 9 NA NA
10 10 25 3
我尝试使用
test %>% mutate(test = complete.cases(.)) %>%
group_by(group = cumsum(test == TRUE)) %>%
select(group, everything())
但它没有按预期工作:
group a b test
<int> <dbl> <dbl> <lgl>
1 1 1 1 TRUE
2 2 2 2 TRUE
3 3 3 3 TRUE
4 3 4 NA FALSE
5 3 5 NA FALSE
6 3 6 NA FALSE
7 4 7 12 TRUE
8 5 8 15 TRUE
9 5 9 NA FALSE
10 6 10 25 TRUE
有什么建议吗?
解决方案
rle
在基础 R 中使用-
transform(df, group1 = with(rle(!is.na(b)), rep(cumsum(values), lengths))) |>
transform(group1 = replace(group1, is.na(b), NA))
# a b group group1
#1 1 1 1 1
#2 2 2 1 1
#3 3 3 1 1
#4 4 NA NA NA
#5 5 NA NA NA
#6 6 NA NA NA
#7 7 12 2 2
#8 8 15 2 2
#9 9 NA NA NA
#10 10 25 3 3
推荐阅读
- compression - 纹理压缩从 4096 到 512 不损失质量
- c++ - E0312, C2664 尝试将矢量对象作为函数参数传递时出错
- r - 从正态分布生成数字
- amazon-web-services - 如何从关闭的 AWS SES 账户中恢复?
- time-complexity - 如何计算算法的时间复杂度 O(n)?
- laravel - Ionic 4 & Laravel API - 在 http 请求上获得空响应
- javascript - 将数据存储到firebase中的多个参考的最有效方法是什么?
- javascript - NativeScript Vue - 材料设计图标未显示
- vue.js - this.myClick() 在这个 vue js 方法中做了什么,我该如何测试它?
- c++ - 用于向量中结构的 C++ 访问索引或使用引用而不是值