【问题标题】:Why does selecting and renaming columns of data.table using the list alias .() return an error?为什么使用列表别名 .() 选择和重命名 data.table 的列会返回错误?
【发布时间】:2020-02-10 17:29:42
【问题描述】:

下面是我的数据表:

DT = data.table(ID = c("a","b","c"), a=1:3, b=10:12, c=100:102)

   ID a  b   c
1:  a 1 10 100
2:  b 2 11 101
3:  c 3 12 102

我正在尝试选择列 a 和 b,并将选定的列分别重命名为 column1 和 column2

DT[, .(a=column1, b=column2)]

但是得到以下错误,不知道为什么。 eval(jsub, SDenv, parent.frame()) 中的错误:找不到对象“column1”

根据包的文档页面,我希望上述内容能够正常工作 https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html

【问题讨论】:

  • 这将是另一种方式DT[, .(column1 = a, column2 = b)],但它只会获取位于.()'中的列

标签: r data.table


【解决方案1】:

我们可以使用setnames,它将通过引用命名

setnames(DT, c('a', 'b'), paste0('column', 1:2))
DT
#   ID column1 column2   c
#1:  a       1      10 100
#2:  b       2      11 101
#3:  c       3      12 102

如果我们是selecting 列并重命名,那将是另一种方式,即不是a = column1,而是column1 = a

DT[, .(column1 = a, column2 = b)]

【讨论】:

  • 同意,但好奇是否不再支持将列重命名包含在 .() 中。
  • 另外,澄清一下我不是想通过引用来命名,只是重命名选择中的列
  • @nthobservation。您是在尝试更新原始数据集还是只是选择所需的列。如果是这样的话DT[, .(column1 = a, column2 = b)]
  • 后者有效。所以顺序错了。
猜你喜欢
  • 2018-04-24
  • 1970-01-01
  • 2015-12-24
  • 2019-12-16
  • 1970-01-01
  • 2023-04-02
  • 2013-09-30
  • 1970-01-01
  • 2010-10-23
相关资源
最近更新 更多