我有三个数据帧,每个数据帧有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)}
答案 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个组。上面的其余代码应该可以正常工作。