r извлечь подмножество набора данных с именем поля - PullRequest
0 голосов
/ 15 декабря 2018

Я использую пакет R tidyverse для извлечения нескольких подмножеств большого набора данных, каждый из которых соответствует определенному имени поля.Однако, поскольку количество извлекаемых подмножеств велико, и извлечение одного за другим с определенным выражением отнимает много времени и задается вопросом, существует ли более быстрый способ сделать это.

Вот минимальный пример: фрейм данных выглядит следующим образом и называется «фиктивным»:

A <- c(605, 605, 608, 608)
B <- c(5, 6, 3, 4)
C <- c(500, 600, 300, 400)
dummy <-as.data.frame(A, B, C)

В настоящее время я делаю следующее:

subject1 <- filter(dummy, A == "605")
subject2 <- filter(dummy, A == "608")

Поскольку в моем исходном наборе данных содержится 100 предметов, этот процесс занимает много времени, и я задаюсь вопросом, есть ли более быстрый способ сделать это.Я отмечаю, что числа в столбце A расположены по порядку, но не подряд, как показано в примере.

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вы можете сделать это с помощью цикла.Однако, как упоминал @akrun, в глобальной среде вы можете получить множество объектов.Например, если у вас было 200 предметов, то у вас будет 200 объектов (очень грязных), возможно, вы могли бы подумать, какими будут ваши следующие шаги, и посмотреть, сможете ли вы достичь того, что вы пытаетесь сделать, не создавая много объектов

subjects <- c(605, 608) 

for (i in 1:length(subjects)) {

  object_name <- paste0("subject", i)
  assign(object_name, filter(dummy, A == subjects[i]))

}
0 голосов
/ 15 декабря 2018

Мы можем сделать split (должно быть быстрее по сравнению с ==) в list из data.frame с

lst1 <- split(dummy, dummy$A)

ПРИМЕЧАНИЕ. Создание нескольких объектов в глобальной среде нерекомендуется

Когда у нас есть list, проще обрабатывать / применять функции в каждом элементе list с lapply/sapply и т. д.

lapply(lst1, function(x) colMeans(x[-1]))

ПРИМЕЧАНИЕ. Если этогруппировать по операции, нам не нужно split это

aggregate(.~ A, dummy, FUN = mean)

данные

dummy <- data.frame(A, B, C)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...