2017-10-20 86 views
-2

我输入矢量vec<-c(2 3 4 8 10 12 15 19 20 23 27 28 39 47 52 60 64 75),以及我想要拆分矢量条目的间隔的大小。根据条目在R中拆分矢量

在这个例子中,我想根据每个条目的大小将其分成9个不同的向量。 在我的情况我想向量号1是在区间[1,9],则载体2是在[10,18]条目... ECT

换句话说条目:

vec1: 2 3 4 8 
vec2: 10 12 15 
vec3: 19 20 23 27 

等...

我已经使用分割功能试过,但我不知道如何设置的比例,将工作。

+0

* ...根据每个条目的大小* - 什么d这意味着什么?请进一步解释你如何从'vec'得到输出。 –

+0

我建议使用整数除法来找出每个属于'%/%'的运算符是哪一个运算符。 – Mako212

+0

当然,我想输入一个向量和一个区间大小,并且输出将是这些向量的数量,这些向量的入口在这些增加的区间内。在上面的示例中,我选择了[1,9],[10,18],... – user7512228

回答

0

使用整数除法%/%要返回的组中的每个值属于英寸然后split成单独的向量的向量。使用(vec-1)是 “包容性”,即27去与3组,组不4.

split(vec,(vec-1) %/% 9) 

编辑:

使用dplyrcut其中明确标记每个区间的另一种方式

require(dplyr) 

vec <- as.data.frame(vec) 

df2 %>% mutate(interval = cut(vec,breaks=seq(0,((max(vec) %/% 9) +1) * 9,9),include.lowest=TRUE,right=TRUE)) 

    vec interval 
1 2 [0,9] 
2 3 [0,9] 
3 4 [0,9] 
4 8 [0,9] 
5 10 (9,18] 
6 12 (9,18] 
7 15 (9,18] 
8 19 (18,27] 
9 20 (18,27] 
10 23 (18,27] 
11 27 (18,27] 
+1

我认为它应该是'split(vec,(vec -1)%/%9)',因为我的情况是我以1开始第一个间隔而不是0 – user7512228

+0

@ user7512228是的,固定。我错过了27日的“包容性”。 – Mako212

1

也许下面会做你想要的。

f <- cut(vec, seq(0, max(vec), by = 9), include.lowest = TRUE) 
sp <- split(vec, f) 
sp <- sp[sapply(sp, function(x) length(x) != 0)] 
sp 
0

也许这

library(purrr) 
vec <- c(2, 3, 4, 8, 10 ,12, 15 ,19, 20, 23, 27, 28, 39, 47, 52, 60, 64, 75) 

vec1 <- keep(vec, function(x) x >= 1 & (x) <= 9) 
vec2 <- keep(vec, function(x) x >= 10 & (x) <= 18)