根据另一个向量将数据帧拆分为多个bin

时间:2016-08-04 22:29:57

标签: r dataframe

假设我有以下数据框

x <- c(12,30,45,100,150,305,2,46,10,221)
x2 <- letters[1:10]
df <- data.frame(x,x2)
df <- df[with(df, order(x)), ]
     x x2
7    2  g
9   10  i
1   12  a
2   30  b
3   45  c
8   46  h
4  100  d
5  150  e
10 221  j
6  305  f

我想根据另一个载体将这些分成几组,

v <- seq(0, 500, 50)

基本上,我想基于列x以及它与v匹配的方式对每一行进行分区(例如x&lt; = v中的元素) - 然后使用v中该元素的位置/索引为该行分配一个组。结果表应如下所示:

     x x2 group
7    2  g    g1
9   10  i    g1
1   12  a    g1
2   30  b    g1
3   45  c    g1
8   46  h    g2
4  100  d    g3
5  150  e    g4
10 221  j    g4
6  305  f    g6

我可以尝试遍历每一行并尝试将其与v匹配,但我仍然对如何轻松检测匹配x&lt; = element v的位置感到困惑,这样我就可以分配一个组ID它。谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用cutdf$x的值分解v

df$group <- as.numeric(cut(df$x, breaks = v))
df$group <- paste0('g', df$group)

cut会返回一个因素,因此您可以使用as.numeric根据df$x提取v的值落入哪个数字存储区。