创建指标

2023-12-01

我想为矩阵创建一个数字指示器,以便对于一个变量中的每个唯一元素,它根据另一个变量中的元素创建一个长度序列。例如:

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

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


No ave?

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

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

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

我最初的想法是使用:

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

where .SD指的是每个子集data.table split by x. .I返回整个行的行号data.table. So, .SD[,.I]返回每组内的行号。尽管,正如 @mnel 指出的,与其他方法相比,这是低效的,因为整个.SD需要将每个组加载到内存中才能运行此计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建指标 的相关文章

随机推荐