You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R data.table字符型列降序排名报一元运算符参数无效错误如何解决

报错原因

你遇到的报错有两个诱因:

  1. 代码里引用了不存在的date列,你的日期列实际名为week_no
  2. 如你推测,week_no是字符类型,无法直接使用一元负号运算符-做取反操作

解决方案

方法1:直接使用frankv自带的order参数(最推荐)

data.table的frankv原生支持通过order参数控制排序方向,不需要对输入值做取反操作,直接适配字符型排序逻辑:

df[, dummy := frankv(week_no, order = -1L), by = group_id]

运行后结果符合降序排名要求:

group_id week_no dummy
1:        1 2019-01     2
2:        1 2019-02     1
3:        2 2019-03     2
4:        2 2019-04     1

如果是多列排序,也可以给order传入和排序列等长的正负1向量,分别控制每列的排序方向。

方法2:将字符年月转为日期类型后取反

如果后续也需要对week_no做日期相关运算,可以先转为日期格式(或zoo包的yearmon类),之后就可以用负号做降序排名:

# 转成Date类型,补上月的第一天做拼接
df[, dummy := frankv(-as.Date(paste0(week_no, "-01"))), by = group_id]

该方法输出结果和方法1完全一致。


内容的提问来源于stack exchange,提问作者Sweepy Dodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:03