我有几个结构相同的数据帧(不同的迭代)。我想从每次迭代中读取数据并使用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
答案 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")
因为select
在Level
调用之前已摆脱spread
。