【问题标题】:select rows in data.table using only the second key [duplicate]仅使用第二个键选择 data.table 中的行[重复]
【发布时间】:2013-05-26 17:19:00
【问题描述】:

如果我有以下情况:

a<-data.table(id=rep(letters[1:4],2), var=c(1,2,1:6), key="id,var")

我可以用

复制“通常的”a[a$id=="a" &amp; a$var==1,]
> a[.("a",1)]
   id var
1:  a   1

但是a[a$var==1,] 呢?如果我用整个id 列更改"a",我不会得到我所期望的:

> a[.(id,1)]
   id var
1:  a   1
2:  a   1
3:  b   1
4:  b   1
5:  c   1
6:  c   1
7:  d   1
8:  d   1

提前致谢。

【问题讨论】:

标签: r data.table


【解决方案1】:

试试这个:

> a[ .(unique(id), 1),, nomatch = 0 ]
   id var
1:  a   1
2:  c   1

已添加。我们可以避免扫描id,方法是将其作为一个因素并使用级别:

> a<-data.table(id=factor(rep(letters[1:4],2)), var=c(1,2,1:6), key="id,var")
> a[ .(levels(id), 1),, nomatch = 0 ]
   id var
1:  a   1
2:  c   1

【讨论】:

  • 它有效,谢谢。我想没有更紧凑的方法可以做到这一点,对吧?
  • 它不再紧凑,但我添加了一个可能更有效的替代方案
  • 我明白了,是的,我可能会快得多。再次感谢
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2015-06-07
  • 2017-03-11
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多