r - 无需编写循环即可对数据帧或 tibble 进行分组

标签 r tidyverse

我正在尝试对值进行分组。我需要将索引中的所有不同值分组到尽可能少的组中,其中索引列不会在组内重复。我试图在没有循环的情况下做到这一点。

给定:

# 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

关于如何在不创建显式循环或应用于此数据集的情况下执行此操作的任何想法?

提前致谢!

最佳答案

一种选择是通过“index”创建序列,然后通过创建的“grp”分割数据

library(tidyverse)
df1 %>%
    group_by(index) %>% 
    mutate(grp = row_number()) %>%
    split(.$grp)

或者使用base R,使用ave创建序列并进行分割

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"))

关于r - 无需编写循环即可对数据帧或 tibble 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408174/

相关文章:

r - 在管道 %>% 中保存 RDS 并让它返回对象

r - 使函数适应 tidyverse 生态系统

r - 如何对 dplyr-R 中的多个数据帧应用相同的操作?

r - mutate(across) 在 tidyverse 中生成多个新列

r - 通过使用 tidyverse 改变参数来调用相同的函数并应用族函数

rollapply() 由 n 个月

r - 如何在列表中保存 100 个 SpatialLines 对象?

python - Pandas .resample() 方法的 R 等价物是什么?

r - 在 R 中合并两个 shapefile

r - 如何将标题(或单元格)的字符串连接到另一个单元格的值?