r - 在不编写循环的情况下分组数据框或小标题
问题描述
我正在尝试对值进行分组。我需要将索引中的所有不同值分组到尽可能少的组中,其中索引列在组内不重复。我试图在没有循环的情况下做到这一点。
给定:
# A tibble: 10 x 2
barcode index
<chr> <chr>
1 XPO21451 a
2 XPO21546 a
3 XPO21500 a
4 XPO21454 b
5 XPO21503 c
6 XPO21457 c
7 XPO21506 1
8 XPO21460 1
9 XPO21509 1
10 XPO21463 2
我需要一个结果
第 1 组
# A tibble: 5 x 2
barcode index
<chr> <chr>
1 XPO21451 a
4 XPO21454 b
5 XPO21503 c
7 XPO21506 1
10 XPO21463 2
第 2 组
# A tibble: 3 x 2
barcode index
<chr> <chr>
2 XPO21546 a
6 XPO21457 c
8 XPO21460 1
第 3 组
# A tibble: 2 x 2
barcode index
barcode index
<chr> <chr>
3 XPO21500 a
9 XPO21509 1
关于如何在不创建显式循环或应用于此数据集的情况下如何做到这一点的任何想法?
提前致谢!
解决方案
一种选择是通过“索引”创建序列,然后split
通过“grp”创建数据
library(tidyverse)
df1 %>%
group_by(index) %>%
mutate(grp = row_number()) %>%
split(.$grp)
或 with base R
, 用于ave
创建序列并执行split
grp <- with(df1, ave(seq_along(index), index, FUN = seq_along))
split(df1, grp)
#$`1`
# barcode index
#1 XPO21451 a
#4 XPO21454 b
#5 XPO21503 c
#7 XPO21506 1
#10 XPO21463 2
#$`2`
# barcode index
#2 XPO21546 a
#6 XPO21457 c
#8 XPO21460 1
#$`3`
# barcode index
#3 XPO21500 a
#9 XPO21509 1
数据
df1 <- structure(list(barcode = c("XPO21451", "XPO21546", "XPO21500",
"XPO21454", "XPO21503", "XPO21457", "XPO21506", "XPO21460", "XPO21509",
"XPO21463"), index = c("a", "a", "a", "b", "c", "c", "1", "1",
"1", "2")), class = "data.frame", row.names = c("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10"))
推荐阅读
- php - 根据row_count在SQL中使用Limit
- c# - 从另一个类的列表中填充组合框
- javascript - Vue.js - 动态生成 v-model 名称
- android - 错误:无法访问 android.support.v7.app.ActionBarActivity 的 ActionBarActivity 类文件未找到
- php - 编码/解码 json 给我所有数字的随机小数
- c - 哪个内核函数调用了 timer_settime() 和在用户空间中实现的定时器处理程序?
- javascript - 反应中的非组件类
- coded-ui-tests - 如何在codede ui中获取表的列数和行数?
- wordpress - 如何在 Laravel 中使用 Corcel
- batch-file - 如何将封面艺术添加到 MP4?