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

时间:2017-11-12 06:12:32

标签: 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))

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

这可以通过expand

中的tidyr轻松完成
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

答案 1 :(得分:1)

我确定有人会尽快找到更清洁的解决方案。与此同时:

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

答案 2 :(得分:1)

这是一个基础R解决方案。

settings
  • 按组拆分x,每组产生一个命名列表
  • 在名称上使用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) 我们可以扩展每个组的整数范围
  • 最后使用lapply将结果整合在一起。