R:将所有组分成两半(dplyr)

R: Split all groups in half (dplyr)

我的数据已分组,但我想将每组分成两部分,如下例所示。 group_half 的内容是什么并不重要,它可以是 1a/1b1.1/1.2 之类的任何内容。关于如何使用 dplyr 执行此操作的任何建议?谢谢!

col_1 <- c(23,31,98,76,47,65,23,76,3,47,54,56)
group <- c(1,1,1,1,2,2,2,2,3,3,3,3)

group_half <- c(1.1, 1.1, 1.2, 1.2, 2.1, 2.1, 2.2, 2.2, 3.1, 3.1, 3.2, 3.2)
df1 <- data.frame(col_1, group, group_half)

# col_1   group   group_half
#    23       1          1.1
#    31       1          1.1
#    98       1          1.2
#    76       1          1.2
#    47       2          2.1
#    65       2          2.1
#    23       2          2.2
#    76       2          2.2
#     3       3          3.1
#    47       3          3.1
#    54       3          3.2
#    56       3          3.2

这里有两个选项:

  1. 如果每组中的行数总是偶数。
library(dplyr)

df1 %>% 
  group_by(group) %>% 
  mutate(group_half = paste(group, rep(1:2, each = n()/2), sep = '.')) %>% 
  ungroup

#   col_1 group group_half
#   <dbl> <dbl> <chr>     
# 1    23     1 1.1       
# 2    31     1 1.1       
# 3    98     1 1.2       
# 4    76     1 1.2       
# 5    47     2 2.1       
# 6    65     2 2.1       
# 7    23     2 2.2       
# 8    76     2 2.2       
# 9     3     3 3.1       
#10    47     3 3.1       
#11    54     3 3.2       
#12    56     3 3.2       
  1. 无论组中的行数如何,这都有效。
df1 %>%
  group_by(group) %>%
  mutate(group_half = paste(group,as.integer(row_number() > n()/2) + 1, sep = '.')) %>% 
  ungroup