для цикла записать несколько кадров данных в г - PullRequest
0 голосов
/ 22 мая 2018

Я хочу создать 26 фреймов данных из необработанных данных (данных), основанных на определенных условиях.dat1 - это данные, где zipid1 = 1, dat2 - это данные, где zipid2 = 1, т. д.

Мои текущие данные выглядят так:

#### create dummy data  ------------------------------------------------------------------------
dat <- data.frame(
  outc1 = rnorm(10, mean = 1, sd = 0.5),
  outc2 = runif(10, min = 0.2, max = 1),
  zipid1 = sample(c(1, 0), 10, replace = T),
  zipid2 = sample(c(1, 0), 10, replace = T),
  zipid3 = sample(c(1, 0), 10, replace = T),
  zipid4 = sample(c(1, 0), 10, replace = T),
  zipid5 = sample(c(1, 0), 10, replace = T)
)

И мои данные о поиске выглядят примерно так:

#### want data looks like this -----------------------------------------------------------------
dat1 <- dat %>%
  filter(zipid1 == 1)

dat2 <- dat %>%
  filter(zipid2 == 1)

dat3 <- dat %>%
  filter(zipid3 == 1)

dat4 <- dat %>%
  filter(zipid4 == 1)

dat5 <- dat %>%
  filter(zipid5 == 1)

На самом деле у меня есть zipid1-zipid26, как мне написать краткий код для одновременного создания 26 наборов данных?

Спасибо !!

1 Ответ

0 голосов
/ 22 мая 2018

Я нашел решение, основанное на ответе @ lmo.

Сначала используйте функцию lapply для создания списка:

myList <- lapply(1:10, function(i) dat[dat[[paste0("zipid", i)]] == 1,])

Затем напишите цикл для извлечения каждого набора данных: (это основано напри ответе на другой вопрос: Извлечение data.frames из списка с использованием цикла for )

for (i in 1:10) {
  assign(paste0("dat", i), as.data.frame(myList[i]))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...