迭代地从数据框和绘图中回收10%的数据

时间:2015-09-21 19:39:56

标签: r dataframe dplyr rbind

我有三个数据帧,每个数据帧有1列,但对于df1,df2,df3分别具有不同的行数100,100,1000。我想迭代地做一个rbind并通过每次获取10%的数据来重复计算小块数据的平均值。在第一次迭代中我需要从df1获得10行,从df2获得10行,从df3获得100,对于这个集合我需要得到一个均值并且该过程应该继续10次。我需要绘制随时间变化的迭代块,在迭代中显示y轴的平均值,并通过此过程获得总体均值。有什么建议?

df1<- data.frame(A=c(1:100))
df2<- data.frame(A=c(1:100))
df3<- data.frame(A=c(1:1000))

library(dplyr)
for i in (1:10)
     { df[i]<- rbind_list(df1,df2,df3)
      mean=mean(df$A)} 

1 个答案:

答案 0 :(得分:3)

您尝试保留单独的数据框,从而使事情变得复杂。添加&#34;组&#34;专栏---称之为&#34;迭代&#34;如果您愿意 - 并将数据放在一个数据框中:

df1$group = rep(1:10, each = nrow(df1) / 10)
df2$group = rep(1:10, each = nrow(df2) / 10)
df3$group = rep(1:10, each = nrow(df3) / 10)
df = rbind(df1, df2, df3)

means = group_by(df, group) %>% summarize(means = mean(A))
means
#  Source: local data frame [10 x 2]
#
#     group means
#  1      1    43
#  2      2   128
#  3      3   213
#  4      4   298
#  5      5   383
#  6      6   468
#  7      7   553
#  8      8   638
#  9      9   723
# 10     10   808

您的总体平均值为mean(df$A)。您可以使用with(means, plot(group, means))进行绘图。

编辑:

如果这些群体没有准确出来,请按以下方式分配群组列。确保您的dplyr是最新的,这会使用.id的{​​{1}}参数,这个参数在本月0.4.3版本中是新的。

bind_rows()

library(dplyr) # dplyr > 0.4.3 df = bind_rows(df1, df2, df3, .id = "id") df = df %>% group_by(id) %>% mutate(group = (0:(n() - 1)) %/% (n() / 10) + 1) 列告诉您该行来自哪个数据框,id列将其拆分为10个组。上面的其余代码应该可以正常工作。