镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Symbol .I consistency when not grouping #2598

Open

Description

@mattdowle

This has come up before I'm sure but I can't find the issue or S.O. post. Anyone remember or have the links please? I seem to remember replying to someone something like ".I is intended for use in grouping as per the documentation, but it would be good to extend it to non-grouping too". The man page still contains the words "while grouping" for .I.

Current behaviour in both v1.10.4-3 and dev :

> X = data.table(c("a","a","b","c","c"), 10:14)
> setkey(X,V1)
>  X["b"]
   V1 V2
1:  b 12       # ok
> X["b", .I]
[1] 1          # expected x's row number 3  (*1)
> X["b", .I, by=.EACHI]
   V1 I
1:  b 3        # ok
> X["b", .(.I,V2)]
   I V2
1: 1 12      # expected x's row number 3 not 1  (*2)
> X["b", .(.I,V2), by=.EACHI]
   V1 I V2
1:  b 3 12     # ok
> 

Now, which=TRUE was intended and works for the first case (*1) :

> X["b", which=TRUE]
[1] 3

but including x's row numbers inside j (*2) isn't currently possible, unless you add x's row numbers explicitly as a column first. It would be nice for .I to do what which=TRUE does in the simple case (*1) and maybe even slowly deprecate which=TRUE argument since my guess is people reach for .I first.

Activity

  1. franknarf1 commented on Jan 30, 2018

    @franknarf1
    Contributor

    Anyone remember or have the links please?

  2. dracodoc commented on Feb 7, 2019

    @dracodoc
    Contributor

    Can we use .I for global thus row number without grouping, and .i for local thus only inside grouping?

  3. MichaelChirico commented on Feb 7, 2019

    @MichaelChirico
    Member

    @dracodoc as mentioned by Frank this is #1206

  4. dracodoc commented on Feb 7, 2019

    @dracodoc
    Contributor

    Sorry I didn't realize there is a whole thread on this idea! That means this is a good idea right?

  5. jangorecki commented on Apr 5, 2020

    @jangorecki
    Member

    example from #539

    dt <- data.table(a=sample(letters, 100, T), b=rnorm(100))
    dt[ a=="c", list(.N, .I)]
       N .I
    1: 4  1
    2: 4  2
    3: 4  3
    4: 4  4
    
    dt[a=="c", list(.N, .I), by=a]
       a N .I
    1: c 4 54
    2: c 4 67
    3: c 4 71
    4: c 4 86
    
  6. added this to the 2.0.0 milestone on Nov 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions