如何将整数向量扩展为 r 中每个组中的连续整数

  • 本文关键字:整数 连续 向量 扩展 r
  • 更新时间 :
  • 英文 :


我想将整数向量扩展为r中每个组中的连续整数。任何人都可以对这个问题有一些提示吗?

以下是我的原始数据集:

  x   = c(1, 2, 3, 4, 5, 1, 3, 5, 6, 1, 2, 3, 6, 8)
group = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3)
data  = data.frame(x, group)

我想要的数据集如下:

desired_data = data.frame(
   x  = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 7, 8),
group = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3))

感谢您的帮助!

可以通过tidyrexpand轻松完成,

library(tidyverse)
df %>% 
 group_by(group) %>% 
 expand(x = full_seq(x, 1))

这给了,

# A tibble: 19 x 2
# Groups:   group [3]
   group     x
   <dbl> <dbl>
 1     1     1
 2     1     2
 3     1     3
 4     1     4
 5     1     5
 6     2     1
 7     2     2
 8     2     3
 9     2     4
10     2     5
11     2     6
12     3     1
13     3     2
14     3     3
15     3     4
16     3     5
17     3     6
18     3     7
19     3     8
我相信

很快就会有人有更干净的解决方案。同时:

minVals=aggregate(data$x, by = list(data$group), min)[,2]
maxVals=aggregate(data$x, by = list(data$group), max)[,2]
ls=apply(cbind(minVals,maxVals),1,function(x) x[1]:x[2])
desired_data = data.frame(
  x  = unlist(ls),
  group = rep(unique(data$group),lapply(ls,length)))
   x group
1  1     1
2  2     1
3  3     1
4  4     1
5  5     1
6  1     2
7  2     2
8  3     2
9  4     2
10 5     2
11 6     2
12 1     3
13 2     3
14 3     3
15 4     3
16 5     3
17 6     3
18 7     3
19 8     3

下面是一个基本的 R 解决方案。

x   = c(1, 2, 3, 4, 5, 1, 3, 5, 6, 1, 2, 3, 6, 8)
group = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3)
sl = split(x,group)
expanded = lapply(names(sl),function(x){
  r = range(sl[[x]])
  return(data.frame(x = seq(r[1],r[2],1),group = x))
})
do.call(rbind,expanded)
  • 按组拆分 x,从而为每个组生成一个命名列表
  • 使用名称上的lapply我们可以扩展每个组的整数范围
  • 最后使用 do.call 将结果重新绑定在一起。

最新更新