【问题标题】:Invalid argument to unary operator (on character column)一元运算符的参数无效(在字符列上)
【发布时间】:2021-12-11 05:44:23
【问题描述】:

假设我有下面的df

df <- data.table(group_id = c(1,1,2,2)
                 , week_no = c('2019-01', '2019-02', '2019-03', '2019-04')
                 ); df

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

分组frank 工作正常:

df[, dummy := frankv(week_no), group_id]; df

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

但是,如果我想按降序排列:

df[, dummy := frankv(-date), group_id]; df

我得到错误:

Error in -date : invalid argument to unary operator

我想这与列week_no 的类是character 有关。除了按升序排列日期,然后按降序排列虚拟列之外,还有其他方法吗?谢谢。

【问题讨论】:

    标签: r data.table rank


    【解决方案1】:

    这是你要找的吗?

    library(data.table)
    
    df[, dummy := frankv(week_no, order = -1L), 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
    

    reprex package (v0.3.0) 于 2021 年 10 月 25 日创建

    【讨论】:

    • 是的。我知道了。谢谢你。所以语法受到了打击。如果我有多个列并且必须使用order 子句怎么办?语法是什么样的?
    • 很高兴能为您提供帮助。你并没有那么远。只是顺序必须用frankv()函数中的order参数指定。祝你工作顺利。干杯
    • 刚刚在frank 的文档order=c(1L, -1L) 中找到这个:)
    • 非常感谢您验证答案。是的,即使这并不总是足够的,参考帮助文档来尝试修复代码问题总是一个好主意。干杯
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2012-10-24
    相关资源
    最近更新 更多