我想在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))
感谢您的帮助!
答案 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 = 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
将结果整合在一起。