R语言实现将向量元素循环递归分配到数据框指定列
实现循环分配人名到数据框列的方法
这里提供两种简单的R语言实现方式,都能满足你循环分配人名的需求:
方法一:使用rep()函数循环重复向量
rep()函数可以轻松实现向量的循环重复,通过length.out参数指定最终生成的向量长度为数据框的行数即可:
# 定义人名向量和数据框 v <- c("John", "Paul", "Annie") df1 <- data.frame(ROOM = c("ROOM01", "ROOM02", "ROOM03", "ROOM04", "ROOM05", "ROOM06", "ROOM07","ROOM08", "ROOM09","ROOM10","ROOM11","ROOM12", "ROOM13", "ROOM14"), PERSON = NA) # 循环分配人名 df1$PERSON <- rep(v, length.out = nrow(df1)) # 查看结果 print(df1)
运行后会直接得到你预期的数据集,rep()会自动按John→Paul→Annie的顺序循环填充,直到覆盖所有14行。
方法二:利用模运算生成循环索引
通过模运算手动生成循环的索引位置,再从人名向量中取值:
# 定义人名向量和数据框 v <- c("John", "Paul", "Annie") df1 <- data.frame(ROOM = c("ROOM01", "ROOM02", "ROOM03", "ROOM04", "ROOM05", "ROOM06", "ROOM07","ROOM08", "ROOM09","ROOM10","ROOM11","ROOM12", "ROOM13", "ROOM14"), PERSON = NA) # 生成循环索引并赋值 df1$PERSON <- v[(seq_len(nrow(df1)) - 1) %% length(v) + 1] # 查看结果 print(df1)
原理说明:seq_len(nrow(df1))生成1到14的序列,减1后变成0到13,对向量长度3取模得到0、1、2的循环序列,再加1后就对应人名向量的1、2、3索引,实现循环取值。
内容的提问来源于stack exchange,提问作者kikusanchez
相关产品推荐
相关产品推荐

