读取多个数据帧并使用R

时间:2019-05-13 21:07:40

标签: r function loops

我有几个结构相同的数据帧(不同的迭代)。我想从每次迭代中读取数据并使用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")

然后将输出rbind到单个数据帧中,每次迭代的行都如下所示:

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 :(得分:0)

我不确定您要做什么,但是您可以调查将数据框制作为列表的方式:

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")

因为selectLevel调用之前已摆脱spread