0
组
分配矢量比方说,我们有以下data.tabledata.table通过
dt = data.table(a=letters[1:20], b = c(rep(1,3),rep(2,7),rep(3,5),rep(4,5)))
是
a b
1: a 1
2: b 1
3: c 1
4: d 2
5: e 2
6: f 2
7: g 2
8: h 2
9: i 2
10: j 2
11: k 3
12: l 3
13: m 3
14: n 3
15: o 3
16: p 4
17: q 4
18: r 4
19: s 4
20: t 4
而且我想从0级分配给1到各行但按列b分组。我在做
dt[,len:=.N,by=b][,rank:=c(0:(len-1))/(len-1),by=b][,len:=NULL]
其中len
只是为了计算等级然后被删除。我获得
a b rank
1: a 1 0.0000000
2: b 1 0.5000000
3: c 1 1.0000000
4: d 2 0.0000000
5: e 2 0.1666667
6: f 2 0.3333333
7: g 2 0.5000000
8: h 2 0.6666667
9: i 2 0.8333333
10: j 2 1.0000000
11: k 3 0.0000000
12: l 3 0.2500000
13: m 3 0.5000000
14: n 3 0.7500000
15: o 3 1.0000000
16: p 4 0.0000000
17: q 4 0.2500000
18: r 4 0.5000000
19: s 4 0.7500000
20: t 4 1.0000000
这正是我想要的。问题是,我得到的也是这个
Warning messages:
1: In base::":"(from, to) :
numerical expression has 3 elements: only the first used
2: In base::":"(from, to) :
numerical expression has 7 elements: only the first used
3: In base::":"(from, to) :
numerical expression has 5 elements: only the first used
4: In base::":"(from, to) :
numerical expression has 5 elements: only the first used
我想不予理会,而当数据是小,我可以通过视力检查结果那很好。但由于我的data.table有成千上万行,我想确保这些警告实际上是无害的。
您认为如何? 或者,等价地,我的方法是通过在data.table中进行分组来允许分配“向量”?有替代品吗?
谢谢
@Imo谢谢!好的解决方案所以你确认一个人可以通过引用分配一个完整的向量组? – deltasun
是的。这是上面的代码所做的。您也可以使用i参数来按组指派或替换矢量的子集。 – lmo