Add the index of list to bind_rows?

data.table solution

use rbindlist() from the data.table-package, which had built-in id-support that respects NULL df's.

library(data.table)
rbindlist( dat, idcol = TRUE )

   .id Group.1 Pr1
1:   1       C  65
2:   1       D  75
3:   3       C  81
4:   3       D   4

dplyr - partly solution

bind_rows also has ID-support, but it 'skips' empty elements...

bind_rows( dat, .id = "id" )

  id Group.1 Pr1
1  1       C  65
2  1       D  75
3  2       C  81
4  2       D   4

Note that the ID of the third element from dat becomes 2, and not 3.


According to the documentation of bind_rows() you can supply the name for .id argument of the function. When you apply bind_rows() to the list of data.frames the names of the list containing your data.frames are assigned to the identifier column. [EDIT] But there is a problem mentioned by @Wimpel:

names(dat)
NULL

However, supplying the names to the list will do the thing:

names(dat) <- 1:length(dat)
names(dat)
[1] "1" "2" "3"
bind_rows(dat, .id = "type")
  type Group.1 Pr1
1    1       C  65
2    1       D  75
3    3       C  81
4    3       D   4

Or in one line, if you prefer:

bind_rows(setNames(dat, seq_along(dat)), .id = "type")

Tags:

R

Dataframe

Dplyr