r 中 2-way table 变量的平均值

Mean of variables in a 2-way table in r

我正在尝试通过观察的平均值获得 2-way table。 我的数据框是这样的

df
 ID       value  Cl   Dom          Con
 <chr>    <dbl> <chr> <chr>        <chr>     
 G1-MAT1      1 B     Knowing      Ar
 G1-MAT2      0 B     Knowing      Ar
 G1-MAT3      0 B     Knowing      Ar
 G1-MAT4      1 C     Knowing      Ar
 G1-MAT5      1 B     Knowing      Ar
 G1-MAT6      0 B     Reasoning    Me
 G1-MAT7      1 B     Reasoning    Ar
 G1-MAT8      1 C     Reasoning    Ar
 G1-MAT9      1 B     Knowing      Me
 G1-MAT10     0 B     Knowing      Ar

我正在尝试使用 tidyverse 获得类似的东西。

  Dom              Ar       Me
  <chr>            <dbl>    <dbl>
  Reasoning        1        0
  Knowing          0.5      1

其中条目是观察的平均值。可能吗?

对于 {tidyverse},您可以使用 group_by()summarize() 然后 pivot_wider() 将其放入您显示的格式。

library(tidyverse)

d <- tibble(value = sample(0:1, 100, T),
            Dom = sample(c("Knowing", "Reasoning"), 100, T),
            Con = sample(c("Ar", "Me"), 100, T))

d %>% 
  group_by(Dom, Con) %>% 
  summarize(value = mean(value, na.rm = T)) %>% 
  pivot_wider(names_from = Con)
#> # A tibble: 2 × 3
#> # Groups:   Dom [2]
#>   Dom          Ar    Me
#>   <chr>     <dbl> <dbl>
#> 1 Knowing   0.435 0.391
#> 2 Reasoning 0.571 0.769

reprex package (v2.0.1)

于 2022-05-18 创建

在基数 R 中:

xtabs(value~., aggregate(value~Dom + Con, df, mean))

           Con
Dom          Ar  Me
  Knowing   0.5 1.0
  Reasoning 1.0 0.0

您可以使用 reshape:

reshape(aggregate(value~Dom + Con, df, mean), 
             timevar =  'Con', idvar = 'Dom', dir = 'wide')
        Dom value.Ar value.Me
1   Knowing      0.5        1
2 Reasoning      1.0        0