【问题标题】:R data.table setkey on numeric column数字列上的R data.table setkey
【发布时间】:2014-07-06 14:40:34
【问题描述】:

我们真的需要添加J() 来选择数字列吗?

没有J()我们可以得到字符列的结果。

library(data.table)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)  
DT["a"]  
#    x y v
# 1: a 1 1
# 2: a 3 2
# 3: a 6 3

setkey(DT,y)  
DT["1"]  
# Error in `[.data.table`(DT, "1") : 
#  typeof x.y (double) != typeof i.y (character)

# Is it a bug?

DT[J(1)]
#    y x v
# 1: 1 a 1
# 2: 1 b 4
# 3: 1 c 7

谢谢!

【问题讨论】:

  • @G.Grothendieck - 为什么不将此作为答案发布?
  • 好的。已将其转移到答案中。
  • 仅供参考,您也可以使用 .(1) 代替 J(1)

标签: r data.table


【解决方案1】:

DT[1]DT[J(1)] 不同的原因是我们可能想要两种不同的解释:

  1. 第一行,DT[1]
  2. 键等于1DT[J(1)]的所有行

仅当第一个参数是数字时才存在潜在的歧义,这就是为什么两种情况有两种不同的符号。

在字符键的情况下,不会出现这种潜在的歧义,因为字符参数只能表示第二种情况。

另外,DT["1"] 是问题代码中的错误,因为示例中的键不是字符,并且 data.table 不会在此处执行类型强制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 2012-07-20
    • 2023-03-22
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2014-01-10
    • 2013-03-11
    相关资源
    最近更新 更多