r - 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
谢谢你的帮助!
解决方案
这是你想要的?
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
推荐阅读
- python - 为数据框中缺失的行添加未来日期
- sql - oracle中的时间戳格式化
- python - Crypto++:使用 PBKDF2 生成基于密码的密钥并将其与 ECDSA 一起使用(从 Python 代码转换而来)
- cpu-architecture - 典型的 DRAM 行缓冲区大小是多少?如何找到它?
- sql - oracle中如何对多个表进行动态选择查询?使用表名和列名作为其他表的值?
- arduino - 通过 ESP8266 Webserver 控制 Arduino 引脚
- php - 无法将类型 ... 的 PHP 值转换为类型 ...。应为以下类型之一:null、DateTime
- c++ - 如何获得带有引号的句子?
- git - 弹出并重放一堆 git 提交
- vba - 根据货币乘以每个单元格