计算平均值和标准差的rep函数

rggaifut  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(116)

这是我的样本数据:

x1 <- c(1, 2, 3, 4, 5)
x2 <- c(6, 7, 4, 5, 7)
x3 <- c(4, 5, 3, 7, 1)
x4 <- c(3, 5, 6, 4, 2)
x5 <- c(1, 3, 4, 4, 2)
x6 <- c(4, 5, 4, 3, 5)

df <- data.frame(x1 = x1, x2 = x2, x3 = x3, x4 = x4, x5 = x5, x6 = x6)

df <- df %>% 
  rowwise() %>%
  mutate(
    var1_mean = mean(c(x1, x2, x3)),
    var2_mean = mean(c(x4, x5, x6))
  )

我想要的是一个箱形图,在第一个框中显示var1_mean的平均值,包括标准差,在另一个框中显示var2_mean的平均值。下面的代码似乎可以完成这项工作,但我不确定,因为我不理解这个rep函数。你能给我解释一下吗?我被告知,这个对象c(rep("var1_mean", nrow(df)), rep("var2_mean", nrow(df)))是一个向量,有两个字符串var1_meansvar2_means,每个字符串重复的次数等于df中的行数。这是否意味着,它计算上述变量的平均值和标准差?

plot_df <- data.frame(
  Variable = c(rep("var1_mean", nrow(df)), rep("var2_mean", nrow(df))),
  Value = c(df$var1_mean, df$var2_mean)
)

ggplot(plot_df, aes(x = Variable, y = Value, fill = Variable)) +
  geom_boxplot() +
  labs(x = "", y = "Mean Value") +
  ggtitle("Box Plot of var1_mean and var2_mean") +
  theme_minimal()

juud5qan

juud5qan1#

rep()中没有计算。
ggplot()输入数据通常是长格式的,在这种情况下,应该有一列包含变量名,另一列包含值;但是在df列中,var1_meanvar2_mean形成宽格式子集:

df
#> # A tibble: 5 × 8
#> # Rowwise: 
#>      x1    x2    x3    x4    x5    x6 var1_mean var2_mean
#>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>     <dbl>     <dbl>
#> 1     1     6     4     3     1     4      3.67      2.67
#> 2     2     7     5     5     3     5      4.67      4.33
#> 3     3     4     3     6     4     4      3.33      4.67
#> 4     4     5     7     4     4     3      5.33      3.67
#> 5     5     7     1     2     2     5      4.33      3

您提供的代码为从宽到长的转换引入了一种不太常见的方法。rep()只是重复(字符串)对象,另一个col中的值是从df tibble的var1_meanvar2_mean列按原样复制的(不要介意不同的格式和明显的舍入,底层值仍然是相同的):

data.frame(
  Variable = c(rep("var1_mean", nrow(df)), rep("var2_mean", nrow(df))),
  Value = c(df$var1_mean, df$var2_mean)
)
#>     Variable    Value
#> 1  var1_mean 3.666667
#> 2  var1_mean 4.666667
#> 3  var1_mean 3.333333
#> 4  var1_mean 5.333333
#> 5  var1_mean 4.333333
#> 6  var2_mean 2.666667
#> 7  var2_mean 4.333333
#> 8  var2_mean 4.666667
#> 9  var2_mean 3.666667
#> 10 var2_mean 3.000000

由于在提供的代码中已经有一些Tidyverse的位,因此获得基本相同结果的常用方法是tidyr::pivot_longer()

library(dplyr)
library(tidyr)

df %>% 
  select(var1_mean, var2_mean) %>% 
  pivot_longer(everything(), names_to = "Variable", values_to = "Value")
#> # A tibble: 10 × 2
#>    Variable  Value
#>    <chr>     <dbl>
#>  1 var1_mean  3.67
#>  2 var2_mean  2.67
#>  3 var1_mean  4.67
#>  4 var2_mean  4.33
#>  5 var1_mean  3.33
#>  6 var2_mean  4.67
#>  7 var1_mean  5.33
#>  8 var2_mean  3.67
#>  9 var1_mean  4.33
#> 10 var2_mean  3

相关问题