【问题标题】:How to reference column names that start with a number, in data.table如何在 data.table 中引用以数字开头的列名
【发布时间】:2013-03-16 06:03:01
【问题描述】:

如果data.table中的列名是number + character的形式,例如:4PCS5Y等,这怎么能在x[i,j]中引用为j,以便解释作为不带引号的列名。

我认为这将解决我原来的问题。我想在“data.table”中添加几列,格式为number + character

M <- data.table('4PCS'=1:4,'5Y'=4:1,X5Y=2:5)
> M[,4PCS+5Y]
Error: unexpected symbol in "M[,4PCS"

新列应该是4PSC5Y 的总和。

有没有办法以不带引号的形式在data.table 中引用它们?如果这些列在data.table 中被引用,并且引用了data.frame 的“逻辑”:

> M[,'5Y',with=FALSE]
     5Y
[1,]  4
[2,]  3
[3,]  2
[4,]  1

那么此类参考的功能将受到限制。添加不起作用,因为它在 data.frame 中不起作用:

> M[,'4PCS'+'5Y',with=FALSE]  
Error in "4PCS" + "5Y" : non-numeric argument to binary operator

data.table 功能将允许对列进行操作。我想在新的data.table 逻辑中找到一个解决方案,因此我可以利用它通过列名引用来转换列的能力。

问题是:
如何引用以数字开头的列名,以便 data.table 逻辑理解它是一个列名。

【问题讨论】:

  • 感谢您的建议

标签: r data.table


【解决方案1】:

我想,这就是你要找的,不确定。 data.tabledata.frame不同。请查看quick introduction,然后查看FAQ(必要时还可以查看参考手册)。

require(data.table)
dt <- data.table("4PCS" = 1:3, y=3:1)
#    4PCS y
# 1:    1 3
# 2:    2 2
# 3:    3 1

# access column 4PCS
dt[, "4PCS"]

# returns a data.table
#    4PCS
# 1:    1
# 2:    2
# 3:    3

# to access multiple columns by name
dt[, c("4PCS", "y")]

或者,如果您需要访问列并且导致data.table,而不是向量,那么您可以使用$ 表示法访问:

dt$`4PCS` # notice the ` because the variable begins with a number
# [1] 1 2 3

# alternatively, as mnel mentioned under comments:
dt[, `4PCS`] 
# [1] 1 2 3

或者,如果您知道可以使用[[.]] 访问的列号,如下所示:

dt[[1]] # 4PCS is the first column here
# [1] 1 2 3

编辑:

谢谢@joran。我想你正在寻找这个:

dt[, `4PCS` + y]
# [1] 4 4 4

从根本上说,4CPS 不是 R 中的有效变量名(尝试4CPS &lt;- 1,您将得到相同的“意外符号”错误)。所以要引用它,我们必须使用反引号(compare`4CPS` &lt;- 1

【讨论】:

  • 不要忘记dt[, `4PCS`](反引号4PCS,就像你通常在data.table之外做的那样
  • 然后明确列名不能以数字开头
【解决方案2】:

你也可以在你调用的变量名之前加上一个“X”,让 R 将其识别为一个名称,而不是将数字和字符串评估为不同的(因此语法错误)

例如调用 4PCS 时使用 X4PCS

我的数据

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2022-01-27
    相关资源
    最近更新 更多