创建指标

我想为矩阵创建一个数字指示符,这样对于一个变量中的每个唯一元素,它会根据另一个变量中的元素创建一个长度序列.例如:

frame<- data.frame(x = c("a", "a", "a", "b", "b"), y = c(3,3,3,2,2))
frame
  x y
1 a 3
2 a 3
3 a 3
4 b 2
5 b 2

指标z应如下所示:

  x y z
1 a 3 1
2 a 3 2
3 a 3 3
4 b 2 1
5 b 2 2

任何和所有的帮助非常感谢.谢谢.

最佳答案
不是吗?

frame$z <- with(frame, ave(y,x,FUN=seq_along) )
frame

#  x y z
#1 a 3 1
#2 a 3 2
#3 a 3 3
#4 b 2 1
#5 b 2 2

data.table版本可能如下所示(感谢@mnel):

#library(data.table)
#frame <- as.data.table(frame)
frame[,z := seq_len(.N), by=x]

我最初的想法是使用:

frame[,z := .SD[,.I], by=x]

其中.SD是指data.table的每个子集,由x分割. .I返回整个data.table的行号.因此,.SD [,.I]返回每个组中的行号.虽然正如@mnel指出的那样,与其他方法相比,这是低效的,因为需要将整个.SD加载到内存中,以便每个组运行此计算.

转载注明原文:创建指标 - 代码日志