提问人:Lukas Wood 提问时间:11/9/2023 最后编辑:Lukas Wood 更新时间:11/9/2023 访问量:33
尝试使用循环遍历数据帧列表的 for 循环来计算各种摘要
Trying to use a for loop that cycles through a list of dataframes to compute various summaries
问:
假设我有一个名为 3 列的大数据集,分别称为 a、b 和 c:fulldata
df1 <- data.frame(
a = rnorm(4, 10), b = rnorm(4, 6), c = 1
)
df2 <- data.frame(
a = rnorm(6, 10), b = rnorm(6, 9), c = 2
)
df3 <- data.frame(
a = rnorm(8, 8), b = rnorm(8, 9), c = 3
)
fulldata <- rbind(df1, df2)
fulldata <- rbind(fulldata, df3)
我也有基于 c 值的子集,即 c = 1 的行......以此类推 3.我有引用这些子集和列名的向量。df1
c_values <- c("df1", "df2", "df3")
columns <- c("a", "b", "c")
从本质上讲,我想为每列 a 到 c 和每个子集创建 5 个数字汇总表,就像你用 summary(x) + a 平均值得到的一样,最小值、q1、中位数等列一直到平均值。另一列指示子集的 c 值,另一列指示正在汇总哪一列(a、b 或 c)。最后,没有基于 c 值的子集,而是基于 fulldata。
编辑:很抱歉,我试图将此表格式化为问题,但在我发布后它没有出现
for (column in columns) {
summary1 <- c(summary(df1$columns), mean(df3$columns))
summary2 <- c(summary(df2$columns), mean(df3$columns))
summary3 <- c(summary(df3$columns), mean(df3$columns))
} #and then bind the summaries together somehow
for (c_value in values) {
for(column in columns)
} #bind the whole table together
在实践中,有远远超过 3 个子集和 3 个列名,因此我希望能够通过快速循环循环遍历它们,因此使用了之前的向量名称,但我似乎无法让语法起作用。
答:
0赞
dufei
11/9/2023
#1
不确定您希望输出的确切外观,但我认为您最好使用分组摘要而不是 for 循环。
在下面的示例中,我定义了一个函数来创建摘要(根据您的喜好进行调整,例如通过包含平均值),然后将其应用于每一列:
library(tidyverse)
df1 <- tibble(
a = rnorm(4, 10), b = rnorm(4, 6), c = 1
)
df2 <- tibble(
a = rnorm(6, 10), b = rnorm(6, 9), c = 2
)
df3 <- tibble(
a = rnorm(8, 8), b = rnorm(8, 9), c = 3
)
fulldata <- rbind(df1, df2, df3)
quantile_df <- function(x, probs = c(0.25, 0.5, 0.75)) {
tibble(
value = quantile(x, probs, na.rm = TRUE),
quantile = probs
)
}
fulldata |>
reframe(
across(c(a, b), quantile_df, .unpack = TRUE),
.by = c
) |>
select(c, quantile = a_quantile, a = a_value, b = b_value)
#> # A tibble: 9 × 4
#> c quantile a b
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 0.25 8.89 5.14
#> 2 1 0.5 9.19 5.93
#> 3 1 0.75 9.54 6.52
#> 4 2 0.25 9.38 8.68
#> 5 2 0.5 9.84 9.03
#> 6 2 0.75 10.8 9.39
#> 7 3 0.25 7.67 8.03
#> 8 3 0.5 7.87 9.45
#> 9 3 0.75 8.47 10.3
创建于 2023-11-09 with reprex v2.0.2
然后,您可以调整/透视数据以更改列和行中的内容。
评论