从数据框和绘图中迭代 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 组。上面的其余代码应该可以正常工作。
我有三个数据框,每个数据框有 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 组。上面的其余代码应该可以正常工作。