r - 不要使用 data.table 自动返回按列

标签 r data.table

示例数据:

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)]
rank_a

[1] 1 2 3 4

这会返回我想要的内容。但是,如果我添加一个 by 语句,

rank_a = dt[,rank(a),by=c]

...然后它返回整个数据框,包括按列“c”,而不仅仅是我想要的答案。

如何解决此问题?

最佳答案

删除一个或多个“by”列的通用解决方案可能是使用 mget + 链接:

dt = data.table(a=c(10,20,30,40),b=c(40,30,20,10),c=c(0,0,1,1),d=c(0,0,0,1))
dt
#     a  b c d
# 1: 10 40 0 0
# 2: 20 30 0 0
# 3: 30 20 1 0
# 4: 40 10 1 1

by.cols = c("c", "d")

# group by one or multiple columns without returning the "group by" columns
# (includes code of @Frank now, see comment)
dt[, .(rank=rank(a)),by = by.cols] [, -(1:length(by.cols))]
#    rank
# 1:    1
# 2:    2
# 3:    1
# 4:    1
#
# OLD code (before including the code snippets from @Frank)
# dt[, .(rank = rank(a)),by=mget(by.cols)] [, -(1:length(by.cols))]

不漂亮,但工作。

PS:是否有更好的方法从 data.table 中排除其名称存储在字符向量中的列?

关于r - 不要使用 data.table 自动返回按列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239111/

相关文章:

r - 使用 `by` 子句时在 data.table 中调度 S3 方法

r - 使用 ggplot 绘制方差和置信区间

r - 在 R 中向量化 rep 和 seq

r - 计算R中所有组合的乘积

r - data.table 切换列名

r - 在两个时间戳之间左加入 R

r - 识别 data.table 中运行的优雅方式

c++ - RcppShark 随机森林示例抛出有关随机数生成器的异常

r - gc() 和 rm() 有什么区别

r - 有没有办法部分匹配文本/字符串并返回 R 中的完整值