Чтение в нескольких фреймах данных и реструктуризация с использованием цикла в R - PullRequest
0 голосов
/ 14 мая 2019

У меня есть несколько фреймов данных с одинаковой структурой (разные итерации). Я хотел бы прочитать данные каждой итерации и реструктурировать с помощью dplyr. Затем скомпилируйте реструктурированный вывод в один фрейм данных. Я думаю, что лучший способ сделать это - зацикливание, но у меня не получилось создать его.

У меня есть 5 наборов данных, как показано ниже.

> df.0
   v1          v2       v3       v4  v5 v6 v7
1   0 -3.82029420 31.81448 301.4946 180 42 21
2   1 -3.57029420 31.81448 301.4946 188 35 21
3   2 -3.32029420 31.81448 301.4946 196 30 21
4   3 -3.07029420 31.81448 301.4946 204 25 21


df.1
   v1           v2       v3       v4  v5 v6 v7
1   0 -3.826521174 31.81448 301.4946 180 43 21
2   1 -3.576521174 31.81448 301.4946 188 36 21
3   2 -3.326521174 31.81448 301.4946 196 30 21
4   3 -3.076521174 31.81448 301.4946 204 25 21

Я хотел бы прочитать каждый и выполнить эту реструктуризацию.

rs.0 = df.0 %>% 
  group_by(v7) %>% 
  slice(1) %>% 
  ungroup() %>%
  filter(!v7 == 21) %>%
  mutate(Level = ifelse(v7 == 22, "II",
                        ifelse(v7 == 23, "III",
                               ifelse(v7 == 24, "IV", NA))),
         iteration = 0)  %>%
  dplyr::select(iteration, v1, v7) %>%
  spread(key = "Level", value = "v1")

Затем связать вывод в один кадр данных со строкой для каждой итерации, которая выглядит следующим образом:

A tibble: 2 x 4
  iteration    II   III    IV
*     <dbl> <int> <int> <int>
1         0    19    29    40
2         1    19    28    39

1 Ответ

0 голосов
/ 14 мая 2019

Я не совсем уверен, что вы пытаетесь сделать, но вы могли бы исследовать превращение ваших фреймов данных в список:

dfList = list(df.0,df.1,df.2,df.3.df.4)

Затем, используя lapply в сочетаниис помощью функции, которая выполняет реструктуризацию:

newList = lapply(dfList,functionYouShouldMake)

Затем вы можете связать их все вместе с do.call (я думаю).Что-то вроде:

goodDF = do.call(rbind,newList)

Примечание: есть некоторые проблемы с вашим кодом реструктуризации.filter(!v7 == 21) избавляет от всех ваших строк в примерных фреймах данных, разве это только первые несколько строк?В любом случае было бы неплохо иметь лучшие примеры данных.

Также это не может работать

dplyr::select(iteration, v1, v7) %>%
 spread(key = "Level", value = "v1")

Поскольку select избавляется от Level до того, как spread вызывает его.

...