我正在尝试更好地使用 Tidyverse 方法来处理数据。因此,我制作了一个包含 4 列的数据框,其中包含三个分类变量和一个连续变量。如何对三个分类变量进行分组,然后计算包含连续变量的第四列中的值的平均值、范围、IQR 等(无特定函数)? 这是我的尝试:
col1 <- c(rep("A", 3), rep("B", 3))
col2 <- c(rep("x", 3), rep("y", 3))
col3 <- c("1", "1", "2", "2", "3", "3")
col4 <- as.numeric(runif(6, min = 0, max = 5))
df <- cbind(col1, col2, col3, col4)
df <- as.data.frame(df)
df$col4 <- as.numeric(df$col4)
df %>%
filter(col1 == "A") %>%
filter(col2 == "x") %>%
filter(col3 == "1") %>%
summarise(
maximum = max(col4),
minimum = min(col4),
print(maximum - minimum)
)
但我相当确定,能够胜任 Tidyverse 的人会认为我的尝试非常丑陋,因此我将不胜感激任何意见。
您可以使用
group_by
dplyr 函数按您想要的行数进行分组。然后您可以使用 summarise
函数创建任意数量的摘要。您还可以使用 .groups
参数来控制是否要对输出的小标题进行分组。
df |>
dplyr::group_by(col1, col2, col3) |>
dplyr::summarise(
maximum = max(col4),
minimum = min(col4),
range = maximum - minimum
)