这就是我的数据框架:
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为'双'以匹配列的类型”。
我做错了什么?
答案 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)