x <- rep(c("A","B","C"),times=c(6,8,3))
 "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" "B" "B" "C" "C" "C"

我正在努力创建一个向量,与每个字母恰好被分成3个箱子相对应:

       (A A A A A A  B B B B B B B B  C C C)
x_bin = 1 1 2 2 3 3  1 1 1 2 2 2 3 3  1 2 3

在本例中,我可以通过组合每2个值将A分成3个箱.我可以通过组合3、3和2的值将B分成3个箱.而我只能通过组合1个值将C分成3个箱.

有什么功能可以让我这样做吗?我try 了cutdplyr,但cut只适用于数字数据,它不能按我想要的方式工作.

推荐答案

1)我们可以这样使用AVE/CUT:

ave(x == x, x, FUN = \(x) cut(seq_along(x), 3))
## [1] 1 1 2 2 3 3 1 1 1 2 2 3 3 3 1 2 3

2)另一种可能性是unlist/tapply/cut:

unlist(tapply(x, x, \(x) cut(seq_along(x), 3, FALSE)))
## A1 A2 A3 A4 A5 A6 B1 B2 B3 B4 B5 B6 B7 B8 C1 C2 C3 
##  1  1  2  2  3  3  1  1  1  2  2  3  3  3  1  2  3 

更新

对(1)和增加(2)稍作改进.

R相关问答推荐

替换收件箱的子集(行和列)

如何使用行政边界形状文件中的人口普查数据调整格栅数据集中的人口数据

r带有参考年的两年移动平均线

将R data.frame转换为json数组(源代码)

在特定列上滞后n行,同时扩展框架的长度

变量计算按R中的行更改

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

根据多个条件增加y轴高度以适应geom_text标签

如何通过ggplot2添加短轴和删除长轴?

计算两列中满足特定条件连续行之间的平均值

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

在R函数中使用加号

基于Key->Value数据帧的基因子集相关性提取

R -使用矩阵reshape 列表

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

如何在GALT包的函数&geom_x样条线中调整线宽

如何从嵌套数据中自动创建命名对象?在R中

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

R没有按顺序显示我的有序系数?