在data.table中创建重复索引

时间:2016-07-09 18:46:23

标签: r data.table

这就是我的数据框架:

library(data.table)
     dt <- fread('

Product  Index2
A          1
B          1
C          2
D          2
E          3
               ')

所以Index2列是我想要的列。我试图通过以下方式创建它:

dt[,Index2:=rep(1:nrow(dt), each=2)]

但我收到错误消息:

  

“提供2774项要分配给'Index2'栏的1387项”和   “强制'整数'RHS为'双'以匹配列的类型”。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我们可以使用length.out剪辑length

dt[, Index3 := rep(1:.N, each=2, length.out=.N)]
dt
#   Product Index2 Index3
#1:       A      1      1
#2:       B      1      1
#3:       C      2      2
#4:       D      2      2
#5:       E      3      3

或另一个选项是gl功能

dt[, Index3 := as.numeric(gl(.N, 2, .N))]

或者@Frank提到

dt[, Index3 := (.I+1) %/% 2]

答案 1 :(得分:1)

不使用rep的其他选项:

dt$Index2 <- ceiling(seq(nrow(dt))/2)