如何基于每10行递增为R数据框添加编号列?
实现每10行递增编号的正确方法
嘿,我来帮你搞定这个问题!先说说你之前代码的问题:n()是返回整个数据框的总行数,对你的例子来说就是100,所以n()/10==10其实是个单一的TRUE值,cumsum(TRUE)会把这个值重复到所有行,结果自然全是1,这显然不是你要的效果。
下面给你两种靠谱的实现方式,都能满足“每10行编号从0开始递增1”的需求:
方法一:用dplyr的简洁写法
我们可以利用行号的整数除法来分组生成编号,代码很直观:
library(dplyr) test_table <- data.frame(row=c(rev(0:99))) test_table <- test_table %>% mutate(No = (row_number() - 1) %/% 10) # 验证前11行的结果 head(test_table, 11)
运行后你会看到前10行的No都是0,第11行变成1,完美符合你的要求。这里row_number()返回每行的位置(1到100),减1后变成0到99,用%/%做整数除法,每10行就会得到同一个编号,每过10行自动加1。
方法二:Base R原生实现(不用dplyr也可以)
如果不想加载dplyr,用base R的代码也能轻松搞定:
test_table <- data.frame(row=c(rev(0:99))) # 两种写法效果完全一致,选你喜欢的就行 test_table$No <- (seq(nrow(test_table)) - 1) %/% 10 # 或者用floor函数:test_table$No <- floor((seq(nrow(test_table)) - 1)/10) # 查看结果 head(test_table, 11)
seq(nrow(test_table))生成1到100的行号序列,后续的逻辑和dplyr版本完全一样,都是通过整数除法把每10行归为同一个编号。
核心逻辑总结
不管用哪种方法,核心都是对行号做整数除法:
- 第1-10行:行号减1后是0-9,除以10取整得到0
- 第11-20行:行号减1后是10-19,除以10取整得到1
- 以此类推,自动实现每10行编号递增1,从0开始。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

