从数据框和绘图中迭代 rbind 10% 的数据

Iteratively rbind 10% of the data from data frame and plotting

我有三个数据框,每个数据框有 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)} 

您试图保留单独的数据框,这让事情变得复杂了。添加一个 "group" 列——如果您愿意,可以将其命名为 "iteration"——并在一个数据框中获取您的数据:

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 是最新的,这使用了 bind_rows().id 参数,这是本月在 0.4.3 版本中新增的。

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 列告诉您该行来自哪个数据框,group 列将其分成 10 组。上面的其余代码应该可以正常工作。