首页 > 解决方案 > 读取多个数据帧并使用 R 中的循环进行重组

问题描述

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

标签: rfunctionloops

解决方案


我不确定您要做什么,但是您可以调查将数据框放入列表中:

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去掉它。Levelspread


推荐阅读