【问题标题】:How to ==1 on a column defined by a variable如何在由变量定义的列上 ==1
【发布时间】:2014-01-28 01:25:17
【问题描述】:

这是一个非常简单的问题,但我再次对data.table 语法感到困惑。

如果我有一个表示列名的字符串——例如column <- "x"——我如何只返回与该列上的逻辑条件匹配的行?

data.frame 中,如果我想返回表中列x 等于1 的所有行,我会写df[df[,column] == 1,]

我如何在data.table 中有效地编写它?

(注意,dt[x == 1] 可以正常工作,但如果您使用像 column 这样的字符串来表示该列的名称,则不能。)

here 的答案很接近,但似乎不足以回答这个问题。

【问题讨论】:

标签: r unique data.table


【解决方案1】:

dt[get(column) == 1] 似乎有效——这是最有效的方法吗?

【讨论】:

  • +1 就语法而言,这很好,是的。或者dt[ dt[[column]]==1 ] 不那么优雅。为了速度,也许setkeyv(dt,column); dt[.(1)]。但仅在单个列上,setkey 的时间通常不值得,因为单个矢量扫描非常快。除非您要查找很多次,在这种情况下 setkey 即使只在一列上也是值得的。
  • 这通常也是我使用的语法。
【解决方案2】:

一种方法:

dt[eval(as.name(column)) == 1, ]

请参阅1.6 of the FAQ 部分,了解如何在dt 的框架内创建表达式并对其求值(尽管常见问题解答在j 的上下文中对此进行了解释,但在i,如上图)。

【讨论】:

  • @Arun,他们有,但它不是同样适用于i 吗?我在这里所做的工作有效,并且遵循相同的模式。
猜你喜欢
  • 2013-12-23
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多