如何让data.table用by分组后仅返回rank结果而非完整数据框?
解决data.table分组后仅返回rank结果的问题
嘿,这个问题我之前也碰到过!data.table在带by分组的时候,默认会把分组键和计算结果一起返回,这是它的设计逻辑——帮你明确每个结果对应的分组。不过要只拿到rank值也很简单,给你两种常用的方法:
方法1:直接提取结果列(得到向量)
如果你想要和无by时一样的向量格式,直接在结果后面加$V1就行,因为data.table在j里直接用表达式的话,默认会把计算列命名为V1:
dt = data.table(a=c(10,20,30,40),b=c(40,30,20,10),c=c(0,0,1,1)) rank_a = dt[, rank(a), by=c]$V1
执行后rank_a就是[1] 1 2 1 2,完全符合你要的仅rank结果的需求。
方法2:得到不含分组列的data.table
要是你还是想保留data.table格式,但不想带分组列c,可以这么做:
# 方式A:先命名计算列,再删除分组列 rank_a = dt[, .(rank_a = rank(a)), by=c][, c := NULL] # 方式B:直接选择计算列 rank_a = dt[, .(rank(a)), by=c][, .(V1)]
这两种方式得到的都是只有rank列的data.table。
简单说就是,data.table分组后默认带分组键,你只要显式提取计算列或者移除分组键就可以啦~
内容的提问来源于stack exchange,提问作者Zhaochen He
相关产品推荐
相关产品推荐

