【问题标题】:Select column of data.table and return vector选择 data.table 的列并返回向量
【发布时间】:2019-11-29 20:21:30
【问题描述】:

是否可以选择 data.table 的列并取回向量?在基础 R 中,参数 drop=TRUE 可以解决问题。例如,

library(data.table)
dat <- as.data.table(iris)
dat[,"Species"] # returns data.table
dat[,"Species", drop=TRUE] # same
iris[, "Species", drop=TRUE] # a factor, wanted result

有没有办法用data.table 做到这一点?

编辑:dat[,Species] 方法很好,但是我需要一个可以在变量中传递列名的方法:

x <- "Species"
dat[,x, drop=TRUE]

【问题讨论】:

  • 在较新的data.table 版本中,您只需说dat[, Species]。你在这里得到一个factor因为你从iris数据集中的一个因素开始。 (我没有投反对票。)
  • 试试dat[,get(x), drop=TRUE](也不是我的反对意见)
  • @Karsten 如果您从 real 问题开始,它会有所帮助。尝试colnam &lt;- "Species",然后是dat[, ..colnam][[1]]。我认为,所有这些都在data.table FAQ 中......

标签: r data.table


【解决方案1】:

data.frame 的默认值为drop = TRUEdata.table 的默认值为在内部完成时相反。根据?data.table

drop - data.table 从未使用过。不使用。它需要在这里,因为 data.table 继承自 data.frame。

为了获得相同的行为,我们可以使用[[通过传递字符串来提取列

identical(dat[["Species"]], iris[, "Species"])
#[1] TRUE

或者

dat$Species

通过使用[[$,它提取为vector,同时还绕过data.table 开销

【讨论】:

    【解决方案2】:

    data.table FAQ #1.1。这是自 2006 年以来的一项功能。

    【讨论】:

      猜你喜欢
      • 2016-01-22
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多