首页 > 解决方案 > R 组成 n 个子群的群(超群)

问题描述

我有一个tibble带有 n 个项目(例如 80 个)的多次出现

library(tidyverse)
set.seed(2323)
data <- tibble(item=rep(paste("item",1:80),sample(1:10,80, replace=T)))

data %>% group_by(item)
# A tibble: 407 x 1
   item  
   <chr> 
 1 item 1
 2 item 1
 3 item 1
 4 item 2
 5 item 2
 6 item 2
 7 item 2
 8 item 2
 9 item 2
10 item 2
# ... with 397 more rows

现在我想添加一个分组列 ( supergroup),它将 n 个子组组合在一起(例如项目 1-4 = 超组 1 等)。

期望tibble

 A tibble: 407 x 2
   item   supergroup
   <chr>       <int>
  item 1          1
  item 1          1
  item 1          1
  item 2          1
...
  item 5          2
  item 5          2
  item 5          2
  item 5          2
  item 5          2

更新:

我认为这样的事情可以解决问题,但是,我被字母数字的性质所困扰item无济于事

n=4
data %>%      
mutate(supergroup=group_indices(group_by(.,item = ntile(item, length(unique(data$item))/n))))
# A tibble: 407 x 2
   item   supergroup
   <chr>       <int>
 1 item 1          1
 2 item 1          1
 3 item 1          1
 4 item 2          3
 5 item 2          3
 6 item 2          3
 7 item 2          3
 8 item 2          3
 9 item 2          3
10 item 2          3
# ... with 397 more rows

谢谢你的帮助!

标签: rdplyrtidyverse

解决方案


这是你想要的?

data %>% group_by(item)
#
len=4
#
data %>%    
  mutate(tmp=as.numeric(gsub("item|\\s","",item))) %>%
  mutate(supergroup = ntile(tmp, length(unique(data$item))/len)) %>% select(item,supergroup)

输出头()

# A tibble: 6 x 2
  item   supergroup
  <chr>       <int>
1 item 1          1
2 item 1          1
3 item 1          1
4 item 2          1
5 item 2          1
6 item 2          1

输出尾()

# A tibble: 6 x 2
  item    supergroup
  <chr>        <int>
1 item 80         20
2 item 80         20
3 item 80         20
4 item 80         20
5 item 80         20
6 item 80         20

推荐阅读