假设我有以下数据框
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它。谢谢。
答案 0 :(得分:3)
您可以使用cut
按df$x
的值分解v
:
df$group <- as.numeric(cut(df$x, breaks = v))
df$group <- paste0('g', df$group)
cut
会返回一个因素,因此您可以使用as.numeric
根据df$x
提取v
的值落入哪个数字存储区。