Добавить индекс списка в bind_rows? - PullRequest
0 голосов
/ 13 июня 2018

У меня есть эти данные:

dat=list(structure(list(Group.1 = structure(3:4, .Label = c("A","B", "C", "D", "E", "F"), class = "factor"), Pr1 = c(65, 75)), row.names = c(NA, -2L), class = "data.frame"),NULL, structure(list( Group.1 = structure(3:4, .Label = c("A","B", "C", "D", "E", "F"), class = "factor"), Pr1 = c(81,4)), row.names = c(NA,-2L), class = "data.frame"))

Я хочу использовать комбайн, используя bind_rows(dat), но сохраняя индексный номер в качестве допустимого выхода. Включите Type([[1]] and [[3]])

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Согласно документации bind_rows() вы можете указать имя для .id аргумента функции.Когда вы применяете bind_rows() к списку data.frame s, имена столбцов, содержащих ваши data.frame s, присваиваются столбцу идентификатора.[РЕДАКТИРОВАТЬ] Но есть проблема, упомянутая @Wimpel:

names(dat)
NULL

Тем не менее, предоставление имен в список будет делать то:

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

Или в одну строку, еслиВы предпочитаете:

bind_rows(setNames(dat, seq_along(dat)), .id = "type")
0 голосов
/ 13 июня 2018

data.table solution

использовать rbindlist (), который имеет встроенную поддержку id, которая учитывает значения NULL df.

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- частично решение

bind_rows также имеет ID-поддержку, но пропускает пустые элементы ...

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

Обратите внимание, что идентификатор третьего элемента из dat становится 2а не 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...